目标
Alice 正在她的电脑上输入一个字符串。但是她打字技术比较笨拙,她 可能 在一个按键上按太久,导致一个字符被输入 多次 。
尽管 Alice 尽可能集中注意力,她仍然可能会犯错 至多 一次。
给你一个字符串 word ,它表示 最终 显示在 Alice 显示屏上的结果。
请你返回 Alice 一开始可能想要输入字符串的总方案数。
示例 1:
输入:word = "abbcccc"
输出:5
解释:
可能的字符串包括:"abbcccc" ,"abbccc" ,"abbcc" ,"abbc" 和 "abcccc" 。
示例 2:
输入:word = "abcd"
输出:1
解释:
唯一可能的字符串是 "abcd" 。
示例 3:
输入:word = "aaaa"
输出:4
提示:
- 1 <= word.length <= 100
- word 只包含小写英文字母。
思路
有一个字符串,其中可能存在至多一个字符由于按键失灵没有及时抬起,导致该字符被输入多次。求原始字符串的总方案数。
找到相邻的重复字符,假设重复了 k
次,那么就有 k
种可能(即多输入了 0 次、1 次、……、k - 1 次)。假设总共有 l
个相邻重复字符,需要减去 l - 1
,因为多录入 0
次被重复计数了。
代码
/**
* @date 2025-07-01 9:01
*/
public class PossibleStringCount3330 {
public int possibleStringCount(String word) {
int res = 0;
int n = word.length();
int l = 0, r = 0, cnt = 0;
while (r < n) {
while (r < n && word.charAt(r) == word.charAt(l)) {
r++;
}
int p = r - l;
cnt += p == 0 ? 0 : 1;
res += p;
l = r;
}
return res - cnt + 1;
}
}