力扣【20】有效的括号

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
 

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

输入:s = "{[]}"
输出:true

小知识:

1. java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.

2. java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.

3. java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看

题解:

方法一:使用栈。

package test;

import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        if(s.isEmpty())
            return true;
        Stack<Character> stack= new Stack<>();//stack也是集合,也可以用泛型
        for(char c:s.toCharArray()){//s.toCharArray()!s.toCharArray()!s.toCharArray()!
            if(c=='(')
                stack.push(')');
            else if(c=='{')
                stack.push('}');
            else if(c=='[')
                stack.push(']');
            else if(stack.empty()||c!=stack.pop())
                return false;
        }
        if(stack.empty())
            return true;
        return false;
    }
}

public class Main{
    public static void main (String []args){
        String s = new String("{()}}}");
        Solution p = new Solution();
        boolean b = p.isValid(s);
        System.out.println("结果:"+b);
    }
}

方法二:暴力解法:

字符串中有效的括号有两种:
嵌套的如:
{ ( [ { } ] ) }
并排的如:
( ) { } [ ] ( )
还有两种复合的:
{ ( ) } [ ( { } ) ]
思路:
首先括号成对出现,奇数的一定不符合。
然后每次消去一个最小的完整括号,如果全部消除,说明是有效括号,如果replace之后字符串不发生变化且长度不为0,说明不是有效括号。

package test;
class Solution {
    public boolean isValid(String s) {
        String s1 = s;
        if (s.length() % 2 != 0) {
            return false;
        }
        while (s.length() != 0) {
            s = s.replace("{}", "");
            s = s.replace("()", "");
            s = s.replace("[]", "");
            if (s == s1) {
                return false;
            }
            s1 = s;
        }
        return true;
    }
}

public class Main{
    public static void main (String []args){
        String s = new String("{([{}])}");
        Solution p = new Solution();
        boolean b = p.isValid(s);
        System.out.println("结果:"+b);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值