1、题目描述
2、解题思路
利用字符串自带的 API:S.indexOf(word) 可以获取字符串 S 中子字符串 word 第一次出现的索引。
1、定义一个 boolean 类型数组 isBold[] 用于保存字符串 S 的每一个字符是否需要加粗;
2、遍历关键词集合 words,利用 indexOf 函数,把需要加粗的字符 isBold[i] 设置为 true;
3、定义一个 StringBuilder 类型用于拼接字符串,遍历字符串 S 的每一个字符:
3.1 如果第一个字符就是要加粗的,先调用 sb.append("");
3.2 每遍历一个字符,先 sb.append(S.charAt(j)),然后判断当前字符和下一个字符的情况:
(1) 当前字符加粗 + 下一个字符加粗:什么也不做,遍历下一个字符;
(2) 当前字符加粗 + 下一个字符不加粗:sb.append("");
(3) 当前字符不加粗 + 下一个加粗:sb.append("")
3、解题代码
class Solution {
public String boldWords(String[] words, String S) {
if (words.length == 0) return S;
boolean[] isBold = new boolean[S.length()];
int idx;
// 把需要加粗的索引标记出来
for (String word : words) {
idx = S.indexOf(word);
while (idx != -1) {
for (int i = idx; i <= idx + word.length() - 1; i++) {
isBold[i] = true;
}
idx = S.indexOf(word, idx + 1);
}
}
// 遍历 S ,在加粗的入口加<b> 出口加 </b>
StringBuilder sb = new StringBuilder();
if (isBold[0]) sb.append("<b>");
for (int j = 0; j < S.length(); j++) {
sb.append(S.charAt(j));
if (j == S.length() - 1) {
if (isBold[j]) {
sb.append("</b>");
}
} else {
if (isBold[j] && !isBold[j + 1]) sb.append("</b>");
if (!isBold[j] && isBold[j + 1]) sb.append("<b>");
}
}
return sb.toString();
}
}