【Java习题练习】对于一个字符串,设计一个算法,计算其是否是一个合法的字符串

在这里插入图片描述
题目看起来并不难,第一想法就是使用栈来解决问题,左括号入栈,右括号出栈,遇到非括号就返回false,最后根据栈中是否还有元素,来确定括号组,是否合法。
于是兴致勃勃写了如下代码:

import java.util.*;
//对于一个字符串,设计一个算法,计算其是否是一个合法的字符串。
public class Parenthesis {
    public boolean chkParenthesis(String A, int n) {
        Stack<Character> s = new Stack<>();
        char[] c = A.toCharArray();//toCharArray()方法真的很常用!!!
        for (int i = 0; i < n; i++) {
            if(c[i] == '('){
                s.push('(');
            }else if(c[i] == ')'){
                s.pop();
            }else{
                return false;
            }
        }

        if(s.size() != 0){
            return false;
        }else{
            return true;
        }
    }
    public static void main (String[] args){
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int n = s.length();
        System.out.println(new Parenthesis().chkParenthesis(s,n));
    }
}

但是!怎么怎么都跑不过去,纠结了好久,怎么看自己的代码怎么对。最终重要发现重要问题,在栈中删除元素时,竟然没有判断栈是否非空!!!
稍加修改,果然对了。

import java.util.*;
//对于一个字符串,设计一个算法,计算其是否是一个合法的字符串。
public class Parenthesis {
    public boolean chkParenthesis(String A, int n) {
        Stack<Character> s = new Stack<>();
        char[] c = A.toCharArray();
        for (int i = 0; i < n; i++) {
            if(c[i] == '('){
                s.push('(');
            }else if(c[i] == ')'){
                //一定要考虑栈空啊!!!
                if(s.size() == 0){
                    return false;
                }else{
                s.pop();
                }
            }else{
                return false;
            }
        }

        if(s.size() != 0){
            return false;
        }else{
            return true;
        }
    }
    public static void main (String[] args){
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        int n = s.length();
        System.out.println(new Parenthesis().chkParenthesis(s,n));
    }
}

发布了62 篇原创文章 · 获赞 28 · 访问量 6065

猜你喜欢

转载自blog.csdn.net/Moo_Lavender/article/details/102993195
今日推荐