给定字符串,判断字符串内的括号是否匹配
1.Stack
给定字符串,判断字符串内的括号是否匹配
左括号入栈,右括号出栈匹配
为了保证正确性,右括号出栈前判断是否栈空
class Solution {
public boolean isValid(String s) {
Stack <Character>st=new Stack<Character>();
for(int i=0;i<s.length();i++){
char cc=s.charAt(i);
if(cc=='('||cc=='['||cc=='{')
st.push(cc);
else{
if(st.isEmpty())
return false;
if(cc==')'&&st.pop()!='(')
return false;
if(cc=='}'&&st.pop()!='{')
return false;
if(cc==']'&&st.pop()!='[')
return false;
}
}
return st.isEmpty();
}
}
2.HashMap和Stack
通过HashMap的键-值映射关系处理左右括号
class Solution {
private HashMap <Character,Character> mapp;
public Solution(){
this.mapp=new HashMap<Character,Character>();
this.mapp.put(']','[');
this.mapp.put('}','{');
this.mapp.put(')','(');
}
public boolean isValid(String s) {
Stack<Character> st=new Stack<Character>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(mapp.containsKey(c)){
char pop=st.isEmpty()?'#':st.pop();
if(this.mapp.get(c)!=pop)
return false;
}else{
st.push(c);
}
}
return st.isEmpty();
}
}