【求助】如何处理带括号的字符串
写一个函数用来统计字符串中各字母出现的次数。
输入:X2Y3XZ,输出:X3Y3Z1;输入:Z3X(XY)2,输出:X3Y2Z3;输入:Z4(Y2(XZ2)3)2X2,输出:X8Y4Z16;
想了很久,只能想到使用递归,先判断字串字符的次数,一层层递归到主串。但关于递归的边界条件一直想不出来,目前只写了一个判断子串的方法,将字串和后方的次数返回为list
附上方法:
public static List<String> extractMessage(String msg) {
List<String> list = new ArrayList<String>();
int start = 0;//字串开始坐标
int startFlag = 0;//用来固定第一个遇到的括号,记录左括号出现的次数
int endFlag = 0;//记录右括号出现的次数
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == '(') {
startFlag++;
if (startFlag == endFlag + 1) {//如果左括号出现时,右括号没出现过,说明是第一个括号
start = i;
}
} else if (msg.charAt(i) == ')') {
endFlag++;
if (endFlag == startFlag) {//如果右括号出现次数,等于左括号出现次数,说明是最右侧的括号
list.add(msg.substring(start + 1, i));
Character nextInt = msg.charAt(i+1);
if (Character.isDigit(nextInt)){
list.add(String.valueOf(msg.charAt(i+1)));//把次数也放进去
} else list.add("1");//否则默认当作1
}
}
}
return list;
}

