20. 有效的括号

2023-11-17

思路

这道题刚看到的时候想着放入数组然后首末都使用指针在指向进行匹对,发现不太好用。
想起表达式计算时是通过入栈进行计算从而进行括号匹对,所以思路还是使用栈,但是Java还不是学得很深,不知道怎么用栈,故通过数组来模拟栈。

  1. 将字符串放入字符数组
  2. 因为想着后面括号匹对太麻烦,所以写了个Switch语句把字符转成数字。并且假设如果能配对,他们之间的差为1。所以按1、24、57、8来代替括号。
  3. 考虑到模拟的栈(数组)下标不指定可能会报数组越界(j=-1时),所以模拟的栈长度比字符数组长度多1。并且初始下标给j=1而不是j=0
  4. 考虑到字符串第一个字符不能为右括号,所以进行条件判断
  5. 出栈入栈

代码

class Solution {
    public boolean isValid(String s) {
        char[] ch = new char[s.length()];
        int[] ch1 = new int[s.length()];
        int[] chDul = new int[s.length()+1];
        
        //字符串放入字符数组
        ch = s.toCharArray();
        
        //字符数组转成对应规律的数字
        for (int i = 0; i < ch.length; i++) {
            switch (ch[i]){
                case '(':ch1[i] = 1;break;
                case ')':ch1[i] = 2;break;
                case '{':ch1[i] = 4;break;
                case '}':ch1[i] = 5;break;
                case '[':ch1[i] = 7;break;
                case ']':ch1[i] = 8;break;
            }
        }
		
		//第一个元素入栈
        chDul[1] = ch1[0];

		//如果为右括号,违反题目定义
        if (!(ch1[0]==1 || ch1[0]==4 || ch1[0]==7)){
            return false;
        }

		//入栈出栈
        int i = 1,j =1;
        for (; i < ch.length;i++ ) {
        	//模拟栈为空的时候,把新的元素放入栈内
            if (j==0){
                chDul[1] = ch1[i];
                j = 1;
                continue;
            }
            //配对上的情况,此时把对应元素归0,并且出“栈”
            if (ch1[i] - chDul[j] == 1){
                chDul[j] = 0;
                j = j - 1;
            }else {
            	//如果没配对上,压下一个元素入“栈”
                j = j + 1;
                chDul[j] = ch1[i];
            }
        }
        //如果能成功配对则栈一定为空,不能配对则有残留
        if (j == 0){
            return true;
        }else {
            return false;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

20. 有效的括号 的相关文章

随机推荐

  • chatGLM介绍

    一 简述 清华大学推出的ChatGLM的第二代版本 支持中文 效果好 清华大学的ChatGLM应该是中文大语言模型中最好的 要求低 可以在消费级的显卡上运行 二 链接 工程 https github com THUDM ChatGLM2 6
  • Ajax提交form表单

    Ajax提交form表单 ajax 几个参数需要注意一下 type POST 方法类型 传递方式 dataType json 预期服务器返回的数据类型 url url 就是form里面的action 不要忘了url前面加 data form
  • 基于OpenCV的人脸识别系统

    人脸识别技术是计算机视觉领域的重要应用之一 它可以通过对人脸图像的分析和比较 实现对不同人的身份的自动识别 在本文中 我们将使用OpenCV这一流行的计算机视觉库 介绍一个简单的人脸识别系统 并且逐步深入到算法的具体实现方式 1 安装与配置
  • 京东Java研发值不值得去?

    有问有答是程序视界的一个免费问答栏目 感兴趣的朋友 可以按照下面的方式参与 在本文后留言 以有问有答开始 放心 这类留言不会被公开 只有被选中的留言会出现在周四晚发布的文章内 同时可根据要求匿名 或发邮件给 foruok 163 com 标
  • linux 服务启动依赖,linux下的系统服务介绍——init、systemd

    我们经常会听到服务service以及daemon这两个词 它们到底是什么意思呢 之间有什么区别和联系吗 linux下的服务service是常驻在内存中的程序 并且能够提供一些系统或网络方面的功能 而daemon从字面翻译是守护进程或后台进程
  • 五、C++语言进阶:智能指针

    5 智能指针 指针的危害 指针未初始化 野指针 内存泄漏 智能指针的出现就是为了解决上面的问题 智能指针基于这样的事实得以发挥作用 定义在栈中的智能指针 当超出其作用域时 会自动调用它的析构函数 从而可以释放其关联的内存资源 5 1 分类
  • 光遇聊天服务器维护,光遇变成“哑遇”?关闭聊天功能的背后,有你不知道的原因!...

    前言 大家好 我是阿瑶 每天为你发布游戏领域最新情报 当社交游戏失去聊天功能 会变成什么样 近期 光遇官博公布了一条消息 表示将暂时关闭聊天服务器 进行维护和更新 一开始玩家们都不相信 毕竟光遇是社交手游 聊天是最重要的玩法 然而没过多久
  • request.GetResponse()超时的解决办法

    var request HttpWebRequest WebRequest Create url request Timeout Timeout Infinite request KeepAlive true var response Ht
  • next文章目录跳转_Hexo-NexT配置个人博客

    一 安装NexT Hexo 安装主题的方式非常简单 只需要将主题文件拷贝至站点目录的 themes 目录下 然后修改下配置文件即可 具体到 NexT 来说 安装步骤如下 1 克隆最新版本 在终端窗口下 定位到 Hexo 站点目录下 使用 G
  • 【RTOS学习】单片机中的C语言

    作者 一只大喵咪1201 专栏 RTOS学习 格言 你只管努力 剩下的交给时间 本喵默认各位小伙伴都会C语言 我们平时学习C语言都是在Windows环境下学习的 对于程序执行的底层逻辑了解的不是非常清楚 本喵在这里给大家介绍一下 C语言在单
  • 【计算机视觉

    文章目录 一 问题 二 个人的理解 2 1 线性层的理解 2 2 pseudo words的理解 2 2 1 详细一点 2 2 2 为什么可以使用文本嵌入空间中的技术 2 2 3 pseudo word的本质是什么 2 2 4 好处 2 2
  • 时间序列分析波动性预测GARCH模型

    GARCH Generalized Autoregressive Conditional Heteroskedasticity 模型是一种常用于预测金融时间序列波动性的统计模型 它是ARCH Autoregressive Condition
  • Axios 发送 json 数据

  • [1008]ROW_NUMBER和RANK和DENSE_RANK的区别

    文章目录 row number over partition by order by 使用说明书 ROW NUMBER和RANK和DENSE RANK的区别 row number over partition by order by 使用说
  • 【SpringBoot 3.x】使用starter整合Druid

    Druid介绍 Druid是阿里巴巴的一个开源项目 号称为监控而生的数据库连接池 在功能 性能 扩展性方面都超过其他例如DBCP C3P0 BoneCP Proxool JBoss DataSource等连接池 而且Druid已经在阿里巴巴
  • echarts自定义主题构建

    ecahrts自定义主体构建 首先 需要ui在echarts官网的工具 gt 主体构建工具 中配置参数 然后导出json 或者直接下载js文件 主体名称最好给个英文名称 如果UI给的是中文 修改一下 1 打开下载的js 2 搜索 echar
  • 100天精通Python(数据分析篇)——第64天:Pandas分组groupby函数案例

    文章目录 一 分组 groupby 1 GroupBy对象 DataFrameGroupBy SeriesGroupBy 1 分组操作 2 分组运算 3 按自定义的key分组 2 GroupBy对象支持迭代操作 1 单层分组 2 多层分组
  • 数据集【NO.7】无人机航拍数据集——VisDrone2019数据集

    写在前面 数据集对应应用场景 不同的应用场景有不同的检测难点以及对应改进方法 本系列整理汇总领域内的数据集 方便大家下载数据集 若无法下载可关注后私信领取 关注免费领取整理好的数据集资料 本文数据集链接 https pan baidu co
  • 10个值得珍藏的4K高清壁纸网站推荐

    作为打开电脑 or 手机第一眼就看到的桌面 给它设置一个赏心悦目的桌面壁纸还是必不可少的 下面分享了 10 个值得珍藏的高清桌面壁纸网站 支持各种图片比例和分辨率 从 720P 到 4K 8K 应有尽有 电脑和手机都可以使用 高清桌面壁纸网
  • 20. 有效的括号

    思路 这道题刚看到的时候想着放入数组然后首末都使用指针在指向进行匹对 发现不太好用 想起表达式计算时是通过入栈进行计算从而进行括号匹对 所以思路还是使用栈 但是Java还不是学得很深 不知道怎么用栈 故通过数组来模拟栈 将字符串放入字符数组