本题难度:
简单
本题思路:
运用栈的思想,以空间换时间,遍历字符串,遇到左括号则放入栈中,遇到右括号则弹出栈顶元素,并与其进行比较,若配对就继续往下对比,否则报错。当配对完后若栈中仍然剩余未配对的左括号(已不存在能够配对的右括号),则此时报错。
本题代码:
class Solution {
public boolean isValid(String s) {
List<Character> tempStack = new ArrayList<Character>();
int count = -1;
for(int i = 0; i < s.length(); i++){
switch(s.charAt(i)){
case '(':
case '[':
case '{':
tempStack.add(s.charAt(i));
count++;
break;
case ')':
if(count >= 0 && tempStack.get(count) == '('){
tempStack.remove(count);
count--;
}
else
return false;
break;
case ']':
if(count >= 0 && tempStack.get(count) == '['){
tempStack.remove(count);
count--;
}
else
return false;
break;
case '}':
if(count >= 0 && tempStack.get(count) == '{'){
tempStack.remove(count);
count--;
}
else
return false;
break;
default:
break;
}
}
if(count == -1)
return true;
else
return false;
}
}
本题复杂度:
时间复杂度T(n)=O(n)
空间复杂度S(n)=O(n)