要求
给你一个字符串 s 和一个字符串列表 words ,你需要将在字符串列表中出现过的 s 的子串添加加粗闭合标签 和 。
如果两个子串有重叠部分,你需要把它们一起用一对闭合标签包围起来。同理,如果两个子字符串连续被加粗,那么你也需要把它们合起来用一对加粗标签包围。
返回添加加粗标签后的字符串 s 。
示例 1:
输入: s = "abcxyz123", words = ["abc","123"]
输出:"<b>abc</b>xyz<b>123</b>"
示例 2:
输入:s = "aaabbcc", words = ["aaa","aab","bc"]
输出:"<b>aaabbc</b>c"
提示:
- 1 <= s.length <= 1000
- 0 <= words.length <= 100
- 1 <= words[i].length <= 1000
- s 和 words[i] 由英文字母和数字组成
- words 中的所有值 互不相同
核心代码
class Solution:
def addBoldTag(self, s: str, words: List[str]) -> str:
size = len(s)
mask = [False] * size
for i in range(size):
prefix = s[i:]
for word in words:
if prefix.startswith(word):
for j in range(i,i + len(word)):
mask[j] = True
ans = []
last = False
for i,ch in enumerate(s):
if last == False and mask[i] == True:
ans.append("<b>")
last = True
elif last == True and mask[i] == False:
ans.append("</b>")
last = False
ans.append(ch)
if last:
ans.append("</b>")
return "".join(ans)
解题思路:首先我们先来找到需要进行mask的列表,我们将得到的数据中mask都设置成True,然后遍历整个数据,我们在单词为真且标记为假的地方添加标签,最后将添加完的整个字符列表拼接起来即可,比较简单。