逻辑
1.判断左括号索引(lBracketsIndex)是否超出待检测字符序列(waitDetectArray)的长度。
2.判断左括号索引对应的字符是否为左括号。
3.获取左括号心爱的另一半:
3.1.初始化count=1。
3.2.遍历待检测序列,直到大于左括号索引时开始判断字符,即以左括号位置为开始位置。
3.3.此时是大于左括号索引,如果当前字符等于左括号,则count+=1。
3.4.如果当前字符等于右括号,则count-=1,其他字符不管。
3.5.依次遍历,直到count=0,则表示遇到了配对的右括号,返回此下标。
例子
()[(())]
-> 索引从0开始,找到索引3的右括号,count的数值变化如下
xxx1210
=> 得到索引6
代码
import scala.util.control.Breaks.{break, breakable}
def rBracketsIndexMatch(waitDetectStr: String, lBracketsIndex: Int): Int = {
var rBracketsIndex = -1
/*
* 检测传进来的左括号索引是否超出
*/
val waitDetectArray = waitDetectStr.toCharArray
if (waitDetectArray.length >= lBracketsIndex) {
/*
* 检测传进来的索引对应的字符是否为左括号
*/
val waitDetectChar = waitDetectArray(lBracketsIndex)
if (waitDetectChar == '(') {
/*
* 获取另一配对括号位置
*/
var count = 1
breakable (
for (i <- waitDetectArray.indices) {
if (i > lBracketsIndex) {
if (waitDetectArray(i) == '(') {
count += 1
} else if (waitDetectArray(i) == ')') {
count -= 1
}
}
if (count == 0) {
rBracketsIndex = i
break
}
}
)
}
}
rBracketsIndex
}
文章来源:https://blog.youkuaiyun.com/qq_37267676/article/details/117335549