有效括号的两种思路

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
一、数组
1、空字符串可被认为是有效字符串,单独判断
3、字符串的长度必须为偶数,否则不是有效括号
2、利用替换的思想
(1)如果() [] {} 成对出现,用”“替换,相当于删除
(2)剩下的,如果有成对的,继续替换
(3)重复length/2次后,用isEmpty()判断。为空,是有效字段
否则,不是有效字段

public static boolean isValid(String s) {
    //创建Stack对象
    //Stack<Character> stack = new Stack<Character>();
    int count=0;
    int length=s.length();
    //当s的长度为偶数(0和其他偶数)时,才有可能为有效括号
    if(length%2==0){
        if(s.isEmpty())
            return true;
        else{
            /*对s进行替换,将成对的(){} [] 替换成"",其实就是把它们从数组中删除;
            * 如果满足条件,继续进行替换,知道循环结束*/
            while (count<length/2){
                s=s.replace("()","").replace("{}","").replace("[]","");
                count++;
            }
            //如果替换后,s的长度还大于0,意味着存在着不成对的括号无法替换,这时,不是有效括号
            if(s.length()>0)
                return false;
            return true;
        }
    }
    return false;
}

二、栈
1、空字符串可被认为是有效字符串,单独判断
2、首先,利用chatAt()将字符串传入栈stack中
3、利用for循环,一个字节一个字节逐个判断
(1)若第一个为 ( [ } 其中一个,利用push()传入到stack1中
(2)若第二个字节为或者stack.peek()为配对的 ) ] } ,stack1.pop()
(3)继续判断
4、若为有效括号,stack1为空;否则,不为空
public static boolean isValid(String s) {
Stack stack = new Stack();
Stack stack1 = new Stack();
//将s中的字符传入栈中

    for (int i = 0; i < s.length(); i++) {
        stack.push(s.charAt(i));
    }
    if(s.isEmpty()){
        return true;
    }
    else{
        for (int i = 0; i < s.length()-1; i++) {
            char c = s.charAt(i);
            char c1= s.charAt(i+1);
            if (c == '(' || c == '[' || c == '{') {
                stack1.push(c);
                if (c == '(' && ( stack.peek() == ')' || c1==')' ) ){
                    stack1.pop();
                }
                if (c == '[' && (stack.peek() == ']' || c1==']' )){
                    stack1.pop();
                }
                if (c == '{' && (stack.peek() == '}'  || c1=='}' )){
                    stack1.pop();
                }
            }
        }
        return stack1.isEmpty();
    }
发布了34 篇原创文章 · 获赞 5 · 访问量 7501

猜你喜欢

转载自blog.csdn.net/qq_39438055/article/details/83904102