wonderful1432 2024-03-04 17:52 采纳率: 9.1%
浏览 4

力扣第20题(有效的括号)没通过

力扣上给了3个用例,每次都是只能通过第3个,哪里出了问题





class Solution {
    public boolean isValid(String s) {
        int[] a=new int[s.length()];
        int[] b=new int[s.length()];
        if(s.length()%2==1||s.charAt(0)==')'||s.charAt(0)==']'||s.charAt(0)=='}') return false;
            for(int i=0;i<s.length();i++){
                switch(s.charAt(i)){        
                    case '(':   a[i]=1;
                    case '[':   a[i]=2;
                    case '{':   a[i]=3;
                    case ')':   a[i]=-1;
                    case ']':   a[i]=-2;
                    case '}':   a[i]=-3;

                }
            }
        for(int i=0,j=0;i<s.length();i++){
                if(a[i]>0)  {
                    ++j;
                    b[j]=a[i];            //入栈        
                }
                else if(a[i]+b[j]==0) --j;      //若匹配,出栈
                else if(a[i]+b[j]!=0)  return false;    //不匹配,返回false
            }
        return true;
    }
}
  • 写回答

3条回答 默认 最新

  • 关注

    wonderful1432 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    首先,你的代码中存在一个问题,即switch语句中的case漏写了break语句,导致每个case穿透到下一个case中。解决这个问题只需要在每个case的最后添加break语句即可。

    另外,你的入栈操作和出栈操作没有正确地对应,即入栈的符号对应的是a[i]而不是a[j]。解决这个问题只需要将入栈操作中的b[j]改为b[i]。

    下面是修改后的代码:

    class Solution {
        public boolean isValid(String s) {
            int[] a = new int[s.length()];
            int[] b = new int[s.length()];
            if (s.length() % 2 == 1 || s.charAt(0) == ')' || s.charAt(0) == ']' || s.charAt(0) == '}') return false;
            for (int i = 0; i < s.length(); i++) {
                switch (s.charAt(i)) {
                    case '(': a[i] = 1; break;
                    case '[': a[i] = 2; break;
                    case '{': a[i] = 3; break;
                    case ')': a[i] = -1; break;
                    case ']': a[i] = -2; break;
                    case '}': a[i] = -3; break;
                }
            }
            for (int i = 0, j = 0; i < s.length(); i++) {
                if (a[i] > 0) {
                    ++j;
                    b[j] = a[i]; // 入栈
                } else if (a[i] + b[j] == 0) {
                    --j; // 出栈
                } else if (a[i] + b[j] != 0) {
                    return false; // 不匹配,返回false
                }
            }
            return true;
        }
    }
    

    现在应该能够通过力扣上的所有测试用例了。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月4日

悬赏问题

  • ¥15 VS2022 C++的相关代码问题咨询
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥30 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码