栈,队列,优先队列
20-Valid Parentheses
有效的括号
class Solution20{
public boolean isValid(String s) {
//从头和尾向中间移动,left和right,当他们相等的时候,返回真
//如果left和left+1位置相等,那么left=left+2
//如果left和left+1位置不等,判断left和right,如果不等返回false,如果相等left right都+1
//"(([]){})"错误
//改用栈,字符串从头遍历到尾,判断栈顶的括号是不是和新放入的一致,一致去掉两个,否则入栈,
//最后栈为空true
//中间取不出来,返回false
if(s.length()%2==1)return false;
Stack<Character> stack=new Stack<Character>();
for(char c:s.toCharArray()) {
if(stack.isEmpty()) {
stack.add(c);
}else {
char temp=stack.peek();
if((temp+c==81&&c-temp==1)||
(temp+c==184&&c-temp==2)||
(c+temp==248&&c-temp==2)) {
stack.pop();
}else {
stack.add(c);
}
}
}
if(stack.isEmpty())return true;
return false;
// int left=0;
// int right=s.length()-1;
// if((right+1)%2==1)return false;
// char [] data=s.toCharArray();
// while(left<=right) {
// //(40 )41 [91 ]93 {123 }125
// if((data[left]+data[left+1]==81&&data[left]-data[left+1]==-1)||
// (data[left]+data[left+1]==184&&data[left]-data[left+1]==-2)||
// (data[left]+data[left+1]==248&&data[left]-data[left+1]==-2)) {
// left=left+2;
// }else if((data[left]+data[right]==81&&data[right]-data[left]==1)||
// (data[left]+data[right]==184&&data[right]-data[left]==2)||
// (data[left]+data[right]==248&&data[right]-data[left]==2)) {
// left=left+1;
// right=right-1;
// }else {
// return false;
// }
// }
// return true;
}
}
// 150-Evaluate Reverse Polish Notation
// 71-Simplify Path (注意错误点)
// 341-Flatten Nested List Iterator