目标
一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。
给你一个字符串 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 <= 10^5
- s 只包含小写英文字母。
思路
定义 好字符串 是不包含连续三个相同字符的字符串,给定一个字符串,删掉最少的字符使之变为好字符串。
记录连续重复字符个数,不同则重置,如果达到三个则跳过。
代码
/**
* @date 2025-07-21 8:40
*/
public class MakeFancyString1957 {
public String makeFancyString_v1(String s) {
int n = s.length();
char prev = ' ';
int cnt = 0;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
if (prev == c) {
if (cnt < 2) {
cnt++;
sb.append(c);
}
} else {
sb.append(c);
prev = c;
cnt = 1;
}
}
return sb.toString();
}
}