1957. 删除字符使字符串变好Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。
给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 。
请你返回删除后的字符串。题目数据保证答案总是 唯一的 。
示例 1:
输入:s = "leeetcode"
输出:"leetcode"
解释:
从第一组 'e' 里面删除一个 'e' ,得到 "leetcode" 。
没有连续三个相同字符,所以返回 "leetcode" 。
示例 2:
输入:s = "aaabaaaa"
输出:"aabaa"
解释:
从第一组 'a' 里面删除一个 'a' ,得到 "aabaaaa" 。
从第二组 'a' 里面删除两个 'a' ,得到 "aabaa" 。
没有连续三个相同字符,所以返回 "aabaa" 。
示例 3:
输入:s = "aab"
输出:"aab"
解释:没有连续三个相同字符,所以返回 "aab" 。
提示:
- 1 <= s.length <= 105
- s 只包含小写英文字母。
# 思路
分组循环,无需特判
# 解法
class Solution {
public String makeFancyString(String s) {
StringBuilder sb = new StringBuilder();
int i = 0, n = s.length(), start = 0;
while (i < n) {
start = i;
while (i < n - 1 && s.charAt(i) == s.charAt(i + 1))
i += 1;
if (i > start) {
sb.append(s.charAt(i));
}
sb.append(s.charAt(i));
i += 1;
}
return sb.toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 总结
- 分析出几种情况,然后分别对各个情况实现