首页 > 其他分享 >Day 25:1807. 替换字符串中的括号内容

Day 25:1807. 替换字符串中的括号内容

时间:2024-06-19 20:30:17浏览次数:11  
标签:1807 25 knowledge res 替换 括号 keyi 字符串 Day

Leetcode 1807. 替换字符串中的括号内容

给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。

  • 比方说,字符串 “(name)is(age)yearsold” 中,有 两个 括号对,分别包含键 “name” 和 “age” 。

你知道许多键对应的值,这些关系由二维字符串数组 knowledge 表示,其中 knowledge[i] = [keyi, valuei] ,表示键 keyi 对应的值为 valuei 。
你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为 keyi 时,你需要:

  • 将 keyi 和括号用对应的值 valuei 替换。
  • 如果从 knowledge 中无法得知某个键对应的值,你需要将 keyi 和括号用问号 “?” 替换(不需要引号)。

knowledge 中每个键最多只会出现一次。s 中不会有嵌套的括号。
请你返回替换 所有 括号对后的结果字符串。

image.png

为了方便查找应该被替换的字符串,将其写入到一个 Map 中,可以快速查询到替换的字符串。
遍历字符串每个字符,如果遇到 (,就查找 )的位置,查找替换的字符串加入到新字符串中;否则直接加入到新字符串中。

完整代码

class Solution {
    public String evaluate(String s, List<List<String>> knowledge) {
        Map<String, String> map = new HashMap<>();
        StringBuilder res = new StringBuilder();
        for (List<String> strings : knowledge) {
            map.put(strings.get(0), strings.get(1));
        }
        
        int len = s.length();
        int i = 0;
        while (i < len) {
            if (s.charAt(i) == '(') {
                int j = i + 1;
                while (s.charAt(j) != ')') j++;
                String sub = s.substring(i + 1, j);
                res.append(map.getOrDefault(sub, "?"));
                i = j;
            } else {
                res.append(s.charAt(i));
            }
            i++;
        }
        return String.valueOf(res);
    }
}

标签:1807,25,knowledge,res,替换,括号,keyi,字符串,Day
From: https://blog.csdn.net/weixin_46091073/article/details/139754087

相关文章

  • 机器学习day03
    机器学习day03超参数选择方法--交叉验证、网格搜索、手写数字识别案例1交叉验证1.1什么是交叉验证?是一种数据集的分割方法,将训练集划分为n份,拿一份做验证集(测试集)、其他n-1份做训练集1.2交叉验证法原理:将数据集划分为cv=4第一次:把第一份数据做验证集,其他数据做训练第......
  • 第七次冲刺(4.25)
     第七天冲刺任务目标与规划任务目标:学习JetpackCompose。开发个人主页。遇到的问题:不会使用JetpackCompose,需要学习。1.学习JetpackCompose推荐学习资源官方文档:JetpackComposeDocumentationComposePathway视频教程:AndroidDevelopers-YouTube......
  • 5.25
    今日学习内容:假设教学管理系统数据库有3个基本表:S(S#,SNAME,AGE,SEX)SC(S#,C#,CNAME)C(C#,CNAME,TEACHER)(说明:SC基本表中的S#是外码,引用了S基本表的S#;SC基本表中的C#是外码,引用了C基本表的C#)完成如下题目(每个题目限用一个SQL语句实现):1)写出SC表的建表语句(数据类型......
  • 4.25
    8-3【Python0027】函数图形绘制分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】设,,,其中,完成下列操作:(1)在同一坐标系下用不同的颜色和线型绘制y1、y2和y3三条曲线;(2)在同一绘图框内以子图形式绘制y1、y2和y3三条曲线。【练习要求】请给......
  • 苹果不会等到明年才对 Siri 进行改进|TodayAI
    据彭博社报道,今年苹果(APPLE)将推出一个更令人满意的 Siri。当 iOS18 今年秋季推出时,Siri的功能不仅仅是让你的iPhone边缘显示彩虹光环。虽然苹果智能功能要到2025年才会向非测试版用户推出,但据报道,Siri本身将在今年年底前获得自然语言更新和其他关键功能。根据......
  • Day28.为何要隐藏属性
    1.为何要隐藏属性 为何要隐藏属性,代码:#2.为何要隐藏print('为何要隐藏'.center(50,'-'))#I、隐藏数据属性#将数据隐藏起来就限制了类外对数据的直接操作,然后类内应该提供相应的接口来允许类外部间接地操作数据,#接口之上可以附加额外的逻辑来对数据地操作进行严格......
  • 3.25
    时长:一个小时代码量:8-1【Python0002】排列组合序列分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。【......
  • 关于FPGA对 DDR4 (MT40A256M16)的读写控制 3
    关于FPGA对DDR4(MT40A256M16)的读写控制3语言:VerilgHDL、VHDLEDA工具:ISE、Vivado、QuartusII关于FPGA对DDR4(MT40A256M16)的读写控制3一、引言二、DDR的功能性描述三、SDRAM设备中模式寄存器的可编程性四、重要的模式寄存器之MR0(1)BurstLength、Type、Order......
  • 255页10万字大数据中心架构、存储、基础设施建设和运维方案WORD(文末附123相关资料下载
    原文《大数据中心架构、大数据存储、数据中心基础设施建设和运维方案》更多参考资料及相关文档下载见文末​大数据中心架构是一个集数据存储、处理、分析和管理于一体的综合性平台。其设计旨在实现高效的数据吞吐、稳定的运行性能和灵活的资源扩展。整个架构采用分层设计,......
  • Day 26| 39. 组合总和 、 40.组合总和II 、 131.分割回文串
    组合总和本题是集合里元素可以用无数次,那么和组合问题的差别其实仅在于startIndex上的控制题目链接/文章讲解:https://programmercarl.com/0039.组合总和.html视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ给定一个无重复元素的数组candidates和一个目标数targ......