【随想】每日两题Day.18

简介: 【随想】每日两题Day.18

题目20. 有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:


输入:s = "()"

输出:true

示例 2:


输入:s = "()[]{}"

输出:true

示例 3:


输入:s = "(]"

输出:false

提示:


1 <= s.length <= 104

s 仅由括号 '()[]{}' 组成

代码:

class Solution {
    public boolean isValid(String s) {
        if(s.length()%2 != 0) return false;
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i < s.length();i++) {
            char c = s.charAt(i);
            if(c == '(') {
                stack.push(')');
            } else if(c == '[') {
                stack.push(']');
            } else if(c == '{') {
                stack.push('}');
            } else {
                if(stack.isEmpty()) return false;
                if(c != stack.pop()) return false;
            }
        }
        if(!stack.isEmpty()) return false;
        return true;
    }
}

思路:

此题不符合符号匹配的情况只有三种,1.左括号多了 2.右括号多了 3.左右符号不匹配

我们利用栈来判断:当遇到左括号,就像栈中加入相应的右括号。当遇到右括号时,就弹出栈顶元素,如果类型不相同则false。判断到最后时,如果栈不为空则false。若都满足则true

题目:1047. 删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:


输入:"abbaca"

输出:"ca"

解释:

例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

提示:


1 <= S.length <= 20000

S 仅由小写英文字母组成。

代码:

class Solution {
    public String removeDuplicates(String s) {
        StringBuilder res = new StringBuilder("");
        for(int i = 0;i<s.length();i++) {
            char c = s.charAt(i);
            if(res.length() == 0 || c != res.charAt(res.length() - 1)) {
                res.append(c);
            }else {
                res.deleteCharAt(res.length() - 1);
            }
            
        }
        return res.toString();
    }
}

思路:

此题和上一题思路一样,只不过将左右括号转化为相同字母。我们可以用栈来实现,但是最后的结果是栈中元素的倒序,所以我们可以直接用一个字符串来模拟栈的过程。

遍历的字符与栈字符串尾部字符不同就append

相同就deleteCharAt

目录
相关文章
|
缓存 Linux Shell
centos7安装字体和中文字体
centos7安装字体和中文字体
1466 0
|
7月前
|
JavaScript Java 开发者
Spring事务失效,常见的情况有哪些?
本文总结了Spring事务失效的7种常见情况,包括未启用事务管理功能、方法非public类型、数据源未配置事务管理器、自身调用问题、异常类型错误、异常被吞以及业务和事务代码不在同一线程中。同时提供了两种快速定位事务相关Bug的方法:通过查看日志(设置为debug模式)或调试代码(在TransactionInterceptor的invoke方法中设置断点)。文章帮助开发者更好地理解和解决Spring事务中的问题。
255 7
|
XML 存储 缓存
记一次雪花算法遇到的 生产事故!
最近生产环境遇到一个问题: 现象:创建工单、订单等地方,全都创建数据失败。 初步排查:报错信息为duplicate key,意思是保存数据的时候,报主键 id 重复,而这些 id 都是由雪花算法生成的,按道理来说,雪花算法是生成分布式唯一 ID,不应该生成重复的 ID。
453 5
|
前端开发 开发者
解决Edge输入document.querySelector(‘video‘).playbackRate = 2.5视频无法加速的问题,‘Uncaught (in promise) TypeErro’
解决Edge输入document.querySelector(‘video‘).playbackRate = 2.5视频无法加速的问题,‘Uncaught (in promise) TypeErro’
|
设计模式 Java
Java一分钟之-设计模式:装饰器模式与代理模式
【5月更文挑战第17天】本文探讨了装饰器模式和代理模式,两者都是在不改变原有对象基础上添加新功能。装饰器模式用于动态扩展对象功能,但过度使用可能导致类数量过多;代理模式用于控制对象访问,可能引入额外性能开销。文中通过 Java 代码示例展示了两种模式的实现。理解并恰当运用这些模式能提升代码的可扩展性和可维护性。
149 1
|
存储 安全 Linux
python文件操作open的使用方法详解
python文件操作open的使用方法详解
319 2
|
XML JavaScript 前端开发
节点的属性
XML DOM 中的每个节点都是对象,具有方法和属性,可通过 JavaScript 处理。关键属性有:nodeName(表示节点名称,对元素、属性和文本节点有不同的值,如标签名、属性名或#text)、nodeValue(定义节点值,元素节点为undefined,文本节点为其内容,属性节点为属性值)和 nodeType。这些属性都是只读的。
|
10月前
|
缓存 数据可视化
Excel协作中的同步盲区,别踩坑!  
多人协作编辑文档时,实时数据同步至关重要。面对数据延迟、覆盖及缓存问题,可通过分时编辑、可视化变更及使用支持实时同步的工具如板.栗.看.板等方法优化同步体验,确保团队高效协作。
|
安全 网络安全 调度
《游戏行业DDoS攻击解决方案》重磅发布
游戏行业一直是竞争、攻击最为复杂的一个江湖。曾经多少充满激情的创业团队、玩法极具特色的游戏产品,被互联网攻击的问题扼杀在摇篮里;又有多少运营出色的游戏产品,因为遭受DDoS攻击,而一蹶不振。游戏行业在防御DDoS攻击时面临着诸多挑战,主要包括可被攻击的薄弱点多、涉及的协议种类多、实时性要求高等技术难点。