请求补全计算字符串嵌套括号最大深度的R代码并解决问题
R语言实现平衡括号最大深度计算(不平衡则返回-1)
咱们先来明确需求:给定一个包含括号的字符串(例如 "( ((X)) (((Y))) )"),我们需要计算其中平衡括号的最大深度——就像示例里的Y被4层括号包裹,所以返回4;如果字符串里的括号是不平衡的(比如左括号多或者右括号多),那就返回-1。
你提供的初始代码存在循环逻辑错误、变量作用域问题,也没处理右括号和不平衡校验的情况,我来帮你修正并完善:
calculate_bracket_depth <- function(S) { current_max <- 0 max_depth <- 0 bracket_count <- 0 # 跟踪括号平衡状态的计数器 # 将字符串拆分为单个字符的向量,逐个遍历 for (char in strsplit(S, "")[[1]]) { if (char == "(") { current_max <- current_max + 1 bracket_count <- bracket_count + 1 # 实时更新最大深度 if (current_max > max_depth) { max_depth <- current_max } } else if (char == ")") { bracket_count <- bracket_count - 1 # 若右括号数量超过左括号,直接判定为不平衡 if (bracket_count < 0) { return(-1) } current_max <- current_max - 1 } # 非括号字符(如X、Y)直接忽略 } # 遍历结束后检查括号是否完全匹配 if (bracket_count != 0) { return(-1) } return(max_depth) } # 测试用例 test_str <- "( ((X)) (((Y))) )" calculate_bracket_depth(test_str) # 预期返回4 unbalanced_str1 <- "((((Y)))" calculate_bracket_depth(unbalanced_str1) # 预期返回-1 unbalanced_str2 <- "())(" calculate_bracket_depth(unbalanced_str2) # 预期返回-1
代码关键逻辑说明:
current_max:记录当前遍历位置的括号嵌套深度max_depth:全程跟踪并保存遇到的最大嵌套深度bracket_count:通过增减计数,实时校验括号的平衡状态- 遍历过程中一旦发现右括号多于左括号,直接返回-1;遍历结束后若计数不为0,说明左右括号数量不匹配,同样返回-1
内容的提问来源于stack exchange,提问作者Filip Pittner
相关产品推荐
相关产品推荐

