20. 有效的括号

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "(]"
输出: false

代码:

class Solution {
public boolean isValid(String s) {
String str="(){}[]";
int len=s.length();

  if(len==0||s==null){return true;}  //空和长度为0 成立
  if(len%2==1){return false;}        //长度为单数必不可能
  int[] stack=new int[(len/2)+1];     

  int i=0,j=0;
   while(i<len&&j>=0){
       if(s.charAt(i)=='('||s.charAt(i)=='{'||s.charAt(i)=='['){   //左符号入栈
           stack[j++]=s.charAt(i++);
       }
       else{       //当前为右符号,如果栈为空则不匹配,栈不为空,查看最顶端符号与当前符号是否匹配
           if(j==0){return false;}   //栈为空,必失败
           if((s.charAt(i)==')'&&stack[j-1]=='(')||(s.charAt(i)==']'&&stack[j-1]=='[')||(s.charAt(i)=='}'&&stack[j-1]=='{')){
              j--;
              i++;                                                                        //匹配成功
          }
          else{
              return false;     //匹配失败
          }
       }
   }
   if(j>0){return false;}   //退出循环如果栈不为空,匹配失败
   return true;
  }
}

uploading-image-306101.png

posted @   堤苏白  阅读(82)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示