LeetCode 758. 字符串中的加粗单词(Trie树)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个关键词集合 words 和一个字符串 S,将所有 S 中出现的关键词加粗。所有在标签 <b> 和 </b>
中的字母都会加粗。
返回的字符串需要使用尽可能少的标签,当然标签应形成有效的组合。
例如,给定 words = ["ab", "bc"] 和 S = "aabcd"
,需要返回 "a<b>abc</b>d"
。注意返回 "a<b>a<b>b</b>c</b>d"
会使用更多的标签,因此是错误的。
注:
words 长度的范围为 [0, 50]。
words[i] 长度的范围为 [1, 10]。
S 长度的范围为 [0, 500]。
所有 words[i] 和 S 中的字符都为小写字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bold-words-in-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
同样题目:LeetCode 616. 给字符串添加加粗标签(Trie树)
- 将集合里的单词全部插入trie树
- 以S的每个位置为起点在trie树开始查找完整单词,记录可以加黑的地方,标记在bool数组里
class trie
{public:trie* next[26] = {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]-'a'] == NULL)cur->next[s[i]-'a'] = new trie();cur = cur->next[s[i]-'a'];}cur->count++;cur->isend = true;}
};
class Solution {public:string boldWords(vector<string>& words, string S) {trie *t = new trie(), *cur;for(auto& w : words)t->insert(w);vector<bool> bold(S.size(), false);//加黑标记int boldl = 0, boldr=-1;//开始加粗的位置l,rfor(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]-'a']){cur = cur->next[S[j]-'a'];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;}
};
12 ms 11.2 MB
长按或扫码关注我的公众号,一起加油、一起学习进步!
LeetCode 758. 字符串中的加粗单词(Trie树)相关推荐
- 编写程序将字符串中最长的单词输出
<程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p241 习题7 8.写一个函数,输入一段英文,将此字符串中最长的单词输出 #include<st ...
- java小编程----反转字符串中的每一个单词
package com.henu.four;public class Test07_3 {// String str= "abc god 中国 java"(较难) 反转每个单词pu ...
- 统计字符串中出现最多的单词和次多的单词
题目:统计字符串中出现最多的单词和次多的单词. 测试用例:"This This This a dog,not a cat!" 输出:This 3次 a 2次 思路:先把这个字 ...
- 用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数.
/2.用一个函数来实现将一行字符串中最长的单词输出.此行字符串从主函数传递给该函数./ #include <stdio.h> #include <string.h> int m ...
- 找字符串中最长单词C语言,C语言 在已知字符串中找最长单词
编程在一个已知的字符串中找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词. 比如:"ni hao world",最长单词是5个字母 这个题目其实不难,但是很多初学者会没 ...
- c语言求出字符串最长单词,C语言 在字符串中找到最长单词
满意答案 路飞的潮人店 2014.05.10 采纳率:59% 等级:9 已帮助:464人 我新写了一个,你看下吧, 主要用到了strtok()这个函数, 这个函数在做字符串切割时很有用的... ...
- (C语言)输入一行字符,将此字符串中最长的单词输出。
输入一行字符,将此字符串中最长的单词输出. #include<stdio.h> #include<string.h> int main() {char a[100], b[10 ...
- Latex中如何加粗字体 如何打出圆圈序号
1.latex中如何加粗字体? \textbf{文本} 我们举一个例子: \textbf{正式地说,PCA做的就是找到一个低维平面,然后将数据投影到上面.} 2.如何打出圆圈序号 如果序号不大的话可以 ...
- Android中字体加粗
Android中字体加粗 Android中字体加粗 一.在xml文件中使用android:textStyle="bold" 二.但是不能将中文设置成粗体,将中文设置成粗体的方法是: ...
最新文章
- LeetCode中等题之重排数字的最小值
- android Json解析详解
- IOS固定IP对动态IP用pre-share
- Manage Jenkins管理界面提示“依赖错误: 部分插件由于缺少依赖无法加载...“问题解决办法
- pip install transformers出现拒绝访问
- Geoserver怎样设置地图不同路线显示不用颜色样式(同一个图层组设置多个图层不同样式)
- OpenGL 点光源的多遍阴影贴图
- android 验证码
- 在Project中引用zedgraph控件
- ueditor滚动条
- SpringBoot--自动装配之Import注解以及源码分析
- 超宽屏幕比例_显示器屏幕比例与分辨率对照表
- myeclipse误删文件恢复
- [置顶] 可惜了,没有人可以代替你自己的思考
- Altium Designer 18中的System–Design Insight
- 【opencv】双目视觉下空间坐标计算/双目测距 6/13更新
- Gap year | 最好金龟换酒
- Page Cache:为什么我的容器内存使用量总是在临界点?
- Java内存模型(JMM)
- excel表格末尾添加一行_这样输入Excel公式,也太快了吧......