Python程序:如何以加粗标签包装模式?
假设我们有一个文本和一个字符串列表,名为patterns,我们必须定义一个embolden函数,其中文本中所有与任何给定模式的字符串匹配的子字符串都被包装在 和 标签中。如果任何两个模式相邻或重叠,它们应该合并成一个标签。
因此,如果输入为text =“thisissampleline”和patterns = [“this”,“issam”,“sample”],则输出将为“abcdefg”,因为bc和ef匹配文本并被包装在 和 标签中。
为了解决这个问题,我们将遵循以下步骤:
- n := text的大小
-
bold:=一个大小为n的列表,用False值填充
-
对于i在范围0到n,做以下每一项
- 对于每个p中的patterns,做以下每一项
- 如果文本[from index i to end]的子字符串以p开头, 那么
-
对于在0到p的尺寸之间的j,执行以下步骤:
- 将bold [i + j]设置为True
- 对于每个p中的patterns,做以下每一项
- ans:=空字符串
-
对于i在范围0到n,执行以下操作
- 如果bold [i]为True且(i等于0或bold [i-1]为false), 那么
- ans := ans连接“”
- ans := ans + text [i]
-
如果bold [i]为True且(i等于n – 1或bold [i + 1]为false), 则
- ans := ans连接“”
- 如果bold [i]为True且(i等于0或bold [i-1]为false), 那么
- 返回ans
看下面的实现,以更好地理解
更多Python相关文章,请阅读:Python 教程
例子
class Solution:
def solve(self, text, patterns):
n = len(text)
bold = [False] * n
for i in range(n):
for p in patterns:
if text[i:].startswith(p):
for j in range(len(p)):
bold[i + j] = True
ans = ""
for i in range(n):
if bold[i] and (i == 0 or not bold[i - 1]):
ans += " **"
ans += text[i]
if bold[i] and (i == n - 1 or not bold[i + 1]):
ans += "** "
return ans
ob = Solution()
text = "thisissampleline"
patterns = ["this", "ssam", "sample"]
print(ob.solve(text, patterns))
输入
"thisissampleline",["this","ssam","sample"]
输出
<b>this</b>i<b>ssample</b>line