leetcode_616 给字符串添加加粗标签

390 阅读1分钟

要求

给你一个字符串 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)

image.png

解题思路:首先我们先来找到需要进行mask的列表,我们将得到的数据中mask都设置成True,然后遍历整个数据,我们在单词为真且标记为假的地方添加标签,最后将添加完的整个字符列表拼接起来即可,比较简单。