package weekContest.A399.A2; /** * @see 压缩字符串 III * @ProjectName: LeetCode * @FileName: Solution * @Author: 杨逸 * @Data:2024/5/26 10:26 * @Description: * 给你一个字符串 word,请你使用以下算法进行压缩: * * 从空字符串 comp 开始。当 word 不为空 时,执行以下操作: * 移除 word 的最长单字符前缀,该前缀由单一字符 c 重复多次组成,且该前缀长度 最多 为 9 。 * 将前缀的长度和字符 c 追加到 comp 。 * 返回字符串 comp 。 * * * * * * 示例 1: * * 输入:word = "abcde" * * 输出:"1a1b1c1d1e" * * 解释: * * 初始时,comp = "" 。进行 5 次操作,每次操作分别选择 "a"、"b"、"c"、"d" 和 "e" 作为前缀。 * * 对每个前缀,将 "1" 和对应的字符追加到 comp。 * * 示例 2: * * 输入:word = "aaaaaaaaaaaaaabb" * * 输出:"9a5a2b" * * 解释: * * 初始时,comp = ""。进行 3 次操作,每次操作分别选择 "aaaaaaaaa"、"aaaaa" 和 "bb" 作为前缀。 * * 对于前缀 "aaaaaaaaa",将 "9" 和 "a" 追加到 comp。 * 对于前缀 "aaaaa",将 "5" 和 "a" 追加到 comp。 * 对于前缀 "bb",将 "2" 和 "b" 追加到 comp。 * * * 提示: * * 1 <= word.length <= 2 * 105 * word 仅由小写英文字母组成。 */ public class Solution { public String compressedString(String word) { String comp = ""; for (int i = 0; i < word.length(); i++) { int count = 1; char c = word.charAt(i); while (i+1 < word.length() && c == word.charAt(i+1)){ count++; i++; if (count == 9)break; } comp += String.valueOf(count) + String.valueOf(c); } return comp; } }