Valid Parentheses问题
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
方法一: 分治法 先遍历找到间隔最短的一对符号,再对这对符号内的子字符串进行判断,就变成了其子问题。(此方法比较麻烦)
java代码:
public class Solution {
public boolean isValid(String s) {
return isvalid(s,0,s.length()-1);
}
public boolean isvalid(String s,int start,int end){
if(start==end){
return false;
}
if(start<end){
List<Integer> a=new ArrayList<Integer>();
List<Integer> b=new ArrayList<Integer>();
List<Integer> c=new ArrayList<Integer>();
for(int i=start;i<=end;i++){
char ch=s.charAt(i);
if(ch=='('){
a.add(i);
continue;
}
if(ch==')'){
int length=a.size();
if(length==0){
return false;
}
if(!isvalid(s,a.get(length-1)+1,i-1)){
return false;
}
a.remove(a.get(length-1));
continue;
}
if(ch=='{'){
b.add(i);
continue;
}
if(ch=='}'){
int length=b.size();
if(length==0){
return false;
}
if(!isvalid(s,b.get(length-1)+1,i-1)){
return false;
}
b.remove(b.get(length-1));
continue;
}
if(ch=='['){
c.add(i);
continue;
}
if(ch==']'){
int length=c.size();
if(length==0){
return false;
}
if(!isvalid(s,c.get(length-1)+1,i-1)){
return false;
}
c.remove(c.get(length-1));
continue;
}
}
if(a.size()==0&&b.size()==0&&c.size()==0){
return true;
}
return false;
}
return true;
}
}
方法二(最简单的方法):利用栈的特性 遍历每个字符,只要是( [ { 都入栈 若是其他的符号,则从栈顶中弹出一个字符 与此比较 如果是一对,则继续遍历,否则 return false;
java代码:
public static boolean isvalid(String s){
List<Character> aa=new ArrayList<Character>();
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
if(ch=='('||ch=='['||ch=='{'){
aa.add(ch);
}else{
int length=aa.size();
if(length==0){
return false;
}
char ca=aa.remove(length-1);
if(!((ca=='('&&ch==')')||(ca=='['&&ch==']')||(ca=='{'&&ch=='}'))){
return false;
}
}
}
return aa.size()==0?true:false;
}