前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 616. 给字符串添加加粗标签(Trie树)

LeetCode 616. 给字符串添加加粗标签(Trie树)

作者头像
Michael阿明
发布2021-02-19 09:53:55
1.2K0
发布2021-02-19 09:53:55
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

给一个字符串 s 和一个字符串列表 dict ,你需要将在字符串列表中出现过的 s 的子串添加加粗闭合标签 <b> 和 </b> 。 如果两个子串有重叠部分,你需要把它们一起用一个闭合标签包围起来。 同理,如果两个子字符串连续被加粗,那么你也需要把它们合起来用一个加粗标签包围。

代码语言:javascript
复制
样例 1:
输入:
s = "abcxyz123"
dict = ["abc","123"]
输出:
"<b>abc</b>xyz<b>123</b>"
 
样例 2:
输入:
s = "aaabbcc"
dict = ["aaa","aab","bc"]
输出:
"<b>aaabbc</b>c"
 
注意:
给定的 dict 中不会有重复的字符串,且字符串数目不会超过 100 。
输入中的所有字符串长度都在范围 [1, 1000] 内。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-bold-tag-in-string 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

代码语言:javascript
复制
class trie
{
public:
    trie* next[128] = {NULL};
    bool isend =  false;
    int count = 0;
    void insert(string& s)
    {
        trie* cur = this;
        for(int i = 0; i < s.size(); i++)
        {
            if(cur->next[s[i]] == NULL)
                cur->next[s[i]] = new trie();
            cur = cur->next[s[i]];
        }
        cur->count++;
        cur->isend = true;
    }
};
class Solution {
public:
    string addBoldTag(string S, vector<string>& words) {
    	trie *t = new trie(), *cur;
    	for(auto& w : words)
    		t->insert(w);
    	vector<bool> bold(S.size(), false);//加黑标记
    	int boldl = 0, boldr=-1;//开始加粗的位置l,r
    	for(int i = 0, j; i < S.size(); ++i)
    	{
    		cur = t;
    		boldl = max(boldl, i);//加黑的地方左端点
    		j = i;
    		while(j < S.size() && cur && cur->next[S[j]])
    		{
    			cur = cur->next[S[j]];
    			if(cur->isend)
    				boldr = j;//可以加黑的右端点
    			j++;
    		}
    		while(boldl <= boldr)
    			bold[boldl++] = true;//标记加黑
    	}
    	string ans;
    	for(int i = 0; i < S.size(); ++i)
    	{
    		if((i==0 && bold[i]) || (i>0 && !bold[i-1] && bold[i]))//i起点
    			ans += "<b>";
    		ans += S[i];
    		if((i==S.size()-1 && bold[i]) || (i<S.size()-1 && bold[i] && !bold[i+1]))//i是终点
    			ans += "</b>";
    	}
    	return ans;
    }
};

156 ms 424.4 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档