题目:
由于只包含字符的字符串'(',')','{','}','['和']',确定输入字符串是有效的。
括号必须关闭以正确的顺序,"()"并且"()[]{}"都是有效的,但"(]"并"([)]"没有。
方法一:
思路:(1)首先将每对括号以键值对的形式添加到HashMap中,其中左半边括号为key,右半边括号为value;
(2)从给定的字符串s的第一个元素下标开始(即i=0开始),直到s的最后一个元素的下标结束(即i=s.length()-1结束),若第i个元素为左半个括号,则将其压入栈中;
若第i个元素为右半个括号,若栈为空或者弹出的栈顶元素所应的value值不等于第i个元素,则返回false;否则i++;
(3)循环执行结束,若栈为空则返回true,否则返回false
代码:
1 class Solution {
2 public boolean isValid(String s) {
3
4 HashMap<Character,Character> hm=new HashMap<Character,Character>();//创建Map用于存放括号
5 hm.put('(',')');
6 hm.put('{','}');
7 hm.put('[',']');
8
9 Stack<Character> S=new Stack<Character>();//创建一个空栈
10
11 //从字符串s的首元素即i=0开始,若s的第i个元素为左半个括号则将其压栈;否则将s的第i个元素与栈顶元素相比较,若不相等则不匹配,否则i++;
12 for(int i=0;i<s.length();i++){
13
14 if(hm.containsKey(s.charAt(i))){
15
16 S.push(s.charAt(i));
17
18 }else if(S.empty()||hm.get(S.pop())!=s.charAt(i)){
19
20 return false;
21
22 }
23 }
24
25 return S.empty();
26
27 }
28 }
方法二:
代码:
1 class Solution {
2 public boolean isValid(String s) {
3
4 Stack<Character> S=new Stack<Character>();
5
6 for(char c:s.toCharArray()){
7
8 if(c=='('){
9
10 S.push(')');
11
12 }else if(c=='{'){
13
14 S.push('}');
15
16 }else if(c=='['){
17
18 S.push(']');
19
20 }else if(S.empty()||S.pop()!=c){
21
22 return false;
23
24 }
25
26 }
27
28 return S.empty();
29
30 }
31 }
来源:https://www.cnblogs.com/xuzhiyuan/p/7650990.html