谷歌(Google)历年编程真题——给字符串添加加粗标签

谷歌历年面试真题——数组和字符串系列真题练习。

给字符串添加加粗标签

给定字符串 s 和字符串数组 words。

对于 s 内部的子字符串,若其存在于 words 数组中, 则通过添加闭合的粗体标签 <b> 和 </b> 进行加粗标记。

如果两个这样的子字符串重叠,你应该仅使用一对闭合的粗体标签将它们包围起来。
如果被粗体标签包围的两个子字符串是连续的,你应该将它们合并。
返回添加加粗标签后的字符串 s 。

示例 1:

输入: s = “abcxyz123”, words = [“abc”,“123”]
输出:“<b>abc</b>xyz<b>123</b>”
解释:两个单词字符串是 s 的子字符串,如下所示: “abcxyz123”。 我们在每个子字符串之前添加<b>,在每个子字符串之后添加</b>。

示例 2:

输入:s = “aaabbb”, words = [“aa”,“b”]
输出:“<b>aaabbb</b>”
解释: "aa"作为子字符串出现了两次: “aaabbb” 和 “aaabbb”。 "b"作为子字符串出现了三次: “aaabbb”、“aaabbb” 和 “aaabbb”。 我们在每个子字符串之前添加<b>,在每个子字符串之后添加</b>:
“<b>a<b>a</b>a</b><b>b</b><b>b</b><b>b</b>”。 由于前两个<b>重叠,把它们合并得到:
“<b>aaa</b><b>b</b><b>b</b><b>b</b>”。 由于现在这四个<b>是连续的,把它们合并得到:
"<b>aaabbb</b> "。

提示:

  • 1 <= s.length <= 1000
  • 0 <= words.length <= 100
  • 1 <= words[i].length<= 1000
  • s 和 words[i] 由英文字母和数字组成
  • words 中的所有值 互不相同

思路一:遍历

  1. 遍历字符串 s,并在每个位置检查是否存在 words 中的某个单词的前缀。
  2. 如果某个位置 i 是一个单词的前缀,并且在 i 之前不存在该单词的完整出现,则在 s 中的 i 位置添加 “” 标签,并记录该单词的结束位置 end。
  3. 继续遍历 s,找到该单词的结束位置 end,将 “” 标签添加到 end 位置后。
  4. 继续遍历 s,直到所有单词的前缀都被处理完毕。

下面是相应的 Python 代码实现:

def addBoldTag(s, words):n = len(s)bold_positions = [False] * nfor word in words:start = 0while start < n:start = s.find(word, start)if start == -1:breakfor i in range(start, start + len(word)):bold_positions[i] = Truestart += 1ans = ''i = 0while i < n:if bold_positions[i]:ans += "<b>"while i < n and bold_positions[i]:ans += s[i]i += 1ans += "</b>"else:ans += s[i]i += 1return ans# 示例 1
s1 = "abcxyz123"
words1 = ["abc", "123"]
print(addBoldTag(s1, words1))  # 输出:<b>abc</b>xyz<b>123</b># 示例 2
s2 = "aaabbb"
words2 = ["aa", "b"]
print(addBoldTag(s2, words2))  # 输出:<b>aaabbb</b>

这个函数根据输入的字符串和单词列表,添加加粗标签后返回字符串。

思路二:贪心算法

  1. 首先,创建一个长度为 s 的布尔数组 is_bold,初始化为 False,用于记录字符串 s 中每个位置是否需要加粗标签。
  2. 遍历字符串 s 中的每个位置,对于每个位置 i,判断以该位置开始是否是 words 中某个单词的前缀。
  3. 如果是某个单词的前缀,则将从该位置开始到该单词结束的所有位置设为需要加粗标签。
  4. 遍历完所有单词后,得到 is_bold 数组,然后根据该数组生成最终的结果字符串。

下面是相应的 Python 代码实现:

def addBoldTag(s, words):n = len(s)is_bold = [False] * nfor word in words:start = 0while start < n:start = s.find(word, start)if start == -1:breakfor i in range(start, start + len(word)):is_bold[i] = Truestart += 1ans = ''i = 0while i < n:if is_bold[i]:ans += "<b>"while i < n and is_bold[i]:ans += s[i]i += 1ans += "</b>"else:ans += s[i]i += 1return ans# 示例 1
s1 = "abcxyz123"
words1 = ["abc", "123"]
print(addBoldTag(s1, words1))  # 输出:<b>abc</b>xyz<b>123</b># 示例 2
s2 = "aaabbb"
words2 = ["aa", "b"]
print(addBoldTag(s2, words2))  # 输出:<b>aaabbb</b>

这个解法的时间复杂度为 O(n * m),其中 n 是字符串 s 的长度,m 是单词列表 words 的长度。虽然时间复杂度较高,但思路清晰直观,实现简单。

思路三:字符串匹配

  1. 创建一个长度为 s 的布尔数组 is_bold,初始化为 False,用于记录字符串 s 中每个位置是否需要加粗标签。
  2. 遍历字符串 s 中的每个位置,对于每个位置 i,判断以该位置开始是否是 words 中某个单词的前缀。
  3. 如果是某个单词的前缀,则尝试匹配该单词的完整出现,并将匹配成功的所有位置设为需要加粗标签。
  4. 遍历完所有单词后,得到 is_bold 数组,然后根据该数组生成最终的结果字符串。

下面是相应的 Python 代码实现:

def addBoldTag(s, words):n = len(s)is_bold = [False] * nfor word in words:start = 0while start < n:start = s.find(word, start)if start == -1:breakend = start + len(word)for i in range(start, end):is_bold[i] = Truestart += 1ans = ''i = 0while i < n:if is_bold[i]:ans += "<b>"while i < n and is_bold[i]:ans += s[i]i += 1ans += "</b>"else:ans += s[i]i += 1return ans# 示例 1
s1 = "abcxyz123"
words1 = ["abc", "123"]
print(addBoldTag(s1, words1))  # 输出:<b>abc</b>xyz<b>123</b># 示例 2
s2 = "aaabbb"
words2 = ["aa", "b"]
print(addBoldTag(s2, words2))  # 输出:<b>aaabbb</b>

这个解法的时间复杂度为 O(n * m * L),其中 n 是字符串 s 的长度,m 是单词列表 words 的长度,L 是单词的平均长度。虽然时间复杂度较高,但实现简单直观。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件设计师——1.备考提纲

知识点说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、设计模式16.00%数据结构与算法10数组、栈、队列、树与二叉树、图、查找与排序、常见算法13.33%程序设计语言6文法…

【CPA考试】2024注册会计师报名照片尺寸要求解读及手机拍照方法

随着2024年注册会计师考试的临近&#xff0c;众多会计专业人士和学生都开始准备报名参加这一行业的重要考试&#xff0c;报名时间为4月8日至4月30日。报名过程中&#xff0c;一张符合要求的证件照是必不可少的。本文将为您详细解读2024年注册会计师考试报名照片的尺寸要求&…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里&#xff0c;如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写&#xff0c; {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

GlusterFS分布式文件系统

一、GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性 二、GlusterFS特点 2.1 扩展性和高性能 Glu…

结合 linux 0.11 源码分析为什么 fork 函数会返回两个值

#&#xff08;1&#xff09;学习资料是这些书 以及赵炯博士的完全剖析。谢谢这些大师与网上优秀的文章。 #&#xff08;2&#xff09;看 linux 0.11 源码是 sourceinlight 4.这里附上一个安装包。 由本图可知&#xff0c; main 函数对 fork 函数的调用。 fork 函数实际是定…

掌握苹果电脑保养秘籍,全方位维护指南!

苹果电脑&#xff08;Mac&#xff09;凭借卓越的性能表现、精致的设计美学以及深入人心的操作系统体验赢得了全球用户的高度评价。不过&#xff0c;无论是哪款顶级配置的Mac产品&#xff0c;都需要经过适时且恰当的保养维护&#xff0c;才能持续展现最优性能。 苹果电脑维护小…

python应用题例子--改试卷

要求&#xff1a;在现实生活中&#xff0c;写一些小函数帮助老师改卷子&#xff0c;比如选择题&#xff0c;本次数学题有12道&#xff0c;正解答案是ABCDCCDDBABA,请根据正确答案&#xff0c;找出学生的错误题并统计正常率。 CORRECT_ANSWERS"ABCDCCDDBABA" #一般习…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

Django之五种中间件定义类型—process_request、process_view、process_response.......

目录 1. 前言 2. 基础中间件 3. 如何自定义中间件 4. 五种自定义中间件类型 4.1 process_request 4.2 process_view 4.3 process_response 4.4 process_exception 4.5 process_template_response 5. 最后 1. 前言 哈喽&#xff0c;大家好&#xff0c;我是小K,今天咋们…

openhomeny鸿蒙arkts笔记

基于api9&#xff0c;创建arkts file&#xff0c;之前是java或者kotlin代码&#xff0c;转鸿蒙代码的一些笔记 1、final用readonly代替 2、Exception用Error代替 3、String用string代替 4、int&#xff0c;long&#xff0c;float&#xff0c;double等用number代替 5、要给…

探索GlassWire:网络安全与流量监控软件

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍1、GlassWire(免费版本)2、核心特点二、下载安装① 下载(免费版本)② 安装三、使用方法①如何使用?②语言切换③流量监控四、总结

Pytest教程:一文了解如何使用 pytest_runtest_makereport 修改 Pytest 测试报告内容

在软件测试过程中&#xff0c;生成清晰、易读的测试报告对于团队交流、问题追踪和项目进度评估至关重要。Pytest 是一个功能强大的 Python 测试框架&#xff0c;它不仅支持丰富的断言和测试用例组织方式&#xff0c;还提供了灵活的插件系统和钩子函数&#xff0c;可以帮助我们定…

window安装maven和hadoop3.1.4

前面的文章已讲解如何安装idea和进行基本设置&#xff0c;本文主要带着大家安装配置好maven和hadoop. 大家不用去官网下载&#xff0c;直接使用我发给大家的压缩文件&#xff0c;注意解压后的文件夹不要放在中文目录下&#xff0c;课堂上我们讲解过原因。 这是我电脑上的路径&a…

程序如何注入钩子

引言 相信大家都不想自己的代码被人拿出去做一些商业化的行为&#xff0c;但是一时半会又没有一个有效的方法&#xff0c;这里我提供一点思路。 常用的钩子程序植入方式 方式解释使用难度描述植入通知程序&#xff08;直接植入&#xff09;使用APi调用接口形式通知远程服务端程…

Python零基础从小白打怪升级中~~~~~~~入门

第二节&#xff1a;Python入门&#xff08;二&#xff09; 一、输入函数 input(“提示信息”) 当程序执行到 input&#xff0c;等待用户输入&#xff0c;输入完成之后才继续向下执行。在Python中&#xff0c;input 接收用户输入后&#xff0c;一般存储到变量&#xff0c;方便…

【每日一题】CF1607 D. Blue-Red Permutation | 贪心 | 简单

题目内容 原题链接 给定一个长度为 n n n 的数组 a a a &#xff0c;以及一个长度为 n n n 的字符串 s s s &#xff0c;字符要么为 B 要么为 R。 一次操作中&#xff0c;可以选择一个下标 i i i &#xff1a; 如果 s i s_i si​ 为 B &#xff0c;可以将 a i a_i ai​…

App Inventor 2 SQLite 拓展

SQLite 拓展 此SQLite 拓展由中文网开发及维护&#xff0c;与 TaifunSQLite 功能类似&#xff0c;但TaifunSQLite是收费的&#xff0c;美刀。 文档及拓展下载地址&#xff1a; App Inventor 2 SQLite 拓展&#xff1a;超流行兼容主流SQL语法的迷你本地数据库引擎 App Invento…

018——红外遥控模块驱动开发(基于HS0038和I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 协议 二、 驱动代码 三、 应用代码 四、 实验 五、 程序优化 一、 模块介绍 1.1 简介 红外遥控被广泛应用于家用电器、工业控制和智能仪器系统中&#xff0c;像我们熟知的有电视机盒子遥控器、空调遥控器。红外遥控器系统分为发送端和…

python如何读取excel文件,并修改内容?

要在Python中读取和修改Excel文件&#xff0c;可以使用openpyxl库。这个库允许你处理Excel文件&#xff08;.xlsx格式&#xff09;&#xff0c;包括读取、修改单元格内容以及保存修改。以下是一个简单的示例&#xff0c;展示了如何使用openpyxl读取Excel文件、修改内容并保存文…

【SCI绘图】【热力图系列1 R】多特征相关性分析热力图R语言实现

SCI&#xff0c;CCF&#xff0c;EI及核心期刊绘图宝典&#xff0c;爆款持续更新&#xff0c;助力科研&#xff01; 本期分享&#xff1a; 【SCI绘图】【热力图系列1 R】多特征相关性分析热力图R语言实现 1.环境准备 library(gplots) library(RColorBrewer) 2.数据示例 ###…