Java Version
String.valueOf(c) 方法是把c转化成String类型
思路是将String中的({[中其中一个push进stack中,譬如(,如果stack非空并且下一个c是),那么将(推出stack,依此类推,最后如果stack是空,则为有效的括号对。
public class Solution {
/**
* @param s A string
* @return whether the string is a valid parentheses
*/
public boolean isValidParentheses(String s) {
// Write your code here
Stack<Character> stack = new Stack<Character>();
for (Character c : s.toCharArray()){
if("({[".contains(String.valueOf(c))){
stack.push(c);
}else{
if((!stack.isEmpty()) && isValid(stack.peek(), c))
stack.pop();
else
return false;
}
}
return stack.isEmpty();
}
public boolean isValid(char c1, char c2){
return ((c1=='(' && c2==')') || (c1=='[' && c2==']') || (c1=='{' && c2=='}'));
}
C++ Version
C++ 进栈用push_back() 出栈pop_back()
if(stack.size()>0) return false 防止stack里只有左括号的情况
class Solution {
public:
/**
* @param s A string
* @return whether the string is a valid parentheses
*/
bool isValidParentheses(string& s) {
// Write your code here
vector<char> stack;
int len = s.length();
for(int i=0; i<len; i++){
if(s[i] == '(' || s[i]=='{' || s[i]=='[')
stack.push_back(s[i]);
else{
if(stack.empty()) return false;
char top = stack[stack.size()-1];
if(s[i]==')' && top!='(') return false;
if(s[i]=='}' && top!='{') return false;
if(s[i]==']' && top!='[') return false;
stack.pop_back();
}
}
if(stack.size()>0) return false;
return true;
}
};}