【求助】如何处理带括号的字符串

写一个函数用来统计字符串中各字母出现的次数。

输入: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;
    }

全部评论
用栈就可以了,优先记录里面的string,记得弹出来再放进去的时候再翻转一次
点赞 回复 分享
发布于 2023-03-21 21:39 广东
总觉得可以用栈噢
点赞 回复 分享
发布于 2023-03-21 21:32 湖北

相关推荐

04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务