LWC 66: 758. Bold Words in String
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/78995533
LWC 66: 758. Bold Words in String
Problem:
Given a set of keywords words and a string S, make all appearances of all keywords in S bold. Any letters between and tags become bold. The returned string should use the least number of tags possible, and of course the tags should form a valid combination. For example, given that words = [“ab”, “bc”] and S = “aabcd”, we should return “aabcd”. Note that returning “aabcd” would use more tags, so it is incorrect.
Note:
- words has length in range [0, 50].
- words[i] has length in range [1, 10].
- S has length in range [0, 500].
- All characters in words[i] and S are lowercase letters.
思路: S的长度不长,所以可以用一个boolean数组记录每个位置是否需要加粗。起初,我for循环两次S,得到可能的subString判断是否在words中存在,结果超时了,解决超时的关键在于note,words的长度最多就10,所以干脆从可能的word中找是否有对应S的subString,这样即解决了超时。
Java版本如下:
public String boldWords(String[] words, String S) {
int n = S.length();
boolean[] marked = new boolean[n];
for (int i = 0; i < n; ++i) {
for (String word : words) {
if (i + word.length() <= n && word.equals(S.substring(i, i + word.length()))) {
for (int j = i; j < i + word.length(); ++j) {
marked[j] = true;
}
}
}
}
StringBuilder sb = new StringBuilder();
int j = 0;
while (j < n) {
while (j < n && !marked[j]) {
sb.append(S.charAt(j));
j ++;
}
if (j >= n) break;
StringBuilder tmp = new StringBuilder();
while (j < n && marked[j]) {
tmp.append(S.charAt(j));
j ++;
}
if (tmp.length() != 0) sb.append("<b>" + tmp.toString() + "</b>");
}
return sb.toString();
}
不过我们还可以采用IMOS累积法,这样可以省去一个for循环。
Java代码如下:
public String boldWords(String[] words, String S) {
int n = S.length();
int[] hits = new int[n];
for (int i = 0; i < n; ++i) {
for (String word : words) {
if (i + word.length() <= n && word.equals(S.substring(i, i + word.length()))) {
hits[i] ++;
hits[i + word.length()] --;
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i < n; ++i) hits[i] += hits[i - 1];
for (int i = 0; i < n; ++i) {
if (hits[i] > 0) {
sb.append("<b>" + S.charAt(i) + "</b>");
}
else sb.append(S.charAt(i));
}
return sb.toString().replace("</b><b>", "");
}
Python版本:
class Solution(object):
def boldWords(self, words, S):
"""
:type words: List[str]
:type S: str
:rtype: str
"""
n = len(S)
hits = [0] * (n + 1)
for i in range(n):
for word in words:
if (i + len(word) <= n and word == S[i:i + len(word)]):
hits[i] += 1
hits[i + len(word)] -= 1
for i in range(1, n + 1): hits[i] += hits[i - 1]
ans = ""
i = 0;
while (i < n):
while (i < n and hits[i] == 0):
ans += S[i]
i += 1
if i >= n: break
tmp = ""
while (i < n and hits[i] != 0):
tmp += S[i]
i += 1
if (len(tmp) != 0): ans += "<b>" + tmp + "</b>"
return ans
- 游标清除重复数据
- 研究人员警示智能音箱等物联网设备存在较多安全问题
- Tootip小程序,整理一下自己用
- 滴滴电单车--“街兔” 无奈相关域名已被注册
- 联发科将推出两款芯片,拥有AI和人脸识别技术,能和高通叫板吗?
- 谷歌AI黑科技曝光:合成语音与真人声音难以区分
- 小程序是什么?有什么用?
- Aibee融资1.65亿元 曾16.8万元秒下aibee.cn
- 小程序审核攻略
- js checkbox.checked=true在document.body.appendChild(checkbox)前与后赋值
- 吹得飞起的人工智能,2017都摔过哪些跟头?
- 排序还可以这样做
- 韩政府公布虚拟货币投机行为打击对策
- SqlServer2005数据库文件损坏的拯救过程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于thinkphp6.0的success、error实现方法
- Yii框架模拟组件调用注入示例
- 解决laravel 表单提交-POST 异常的问题
- laravel5.0在linux下解决.htaccess无效和去除index.php的问题
- laravel返回统一格式错误码问题
- 使用 PHP Masked Package 屏蔽敏感数据的实现方法
- PHP简单实现图片格式转换(jpg转png,gif转png等)
- 在thinkphp5.0路径中实现去除index.php的方式
- Laravel5.5 手动分页和自定义分页样式的简单实现
- laravel自定义分页的实现案例offset()和limit()
- Laravel6.0.4中将添加计划任务事件的方法步骤
- Laravel 不同生产环境服务器的判断实践
- 解决thinkPHP 5 nginx 部署时,只跳转首页的问题
- Laravel 类和接口注入相关的代码
- laravel unique验证、确认密码confirmed验证以及密码修改验证的方法