力扣算法题(8)栈 队列 优先队列

栈,队列,优先队列

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值