Solution.java 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package weekContest.A399.A2;
  2. /**
  3. * @see <a href='https://leetcode.cn/problems/string-compression-iii/description/'>压缩字符串 III</a>
  4. * @ProjectName: LeetCode
  5. * @FileName: Solution
  6. * @Author: 杨逸
  7. * @Data:2024/5/26 10:26
  8. * @Description:
  9. * 给你一个字符串 word,请你使用以下算法进行压缩:
  10. *
  11. * 从空字符串 comp 开始。当 word 不为空 时,执行以下操作:
  12. * 移除 word 的最长单字符前缀,该前缀由单一字符 c 重复多次组成,且该前缀长度 最多 为 9 。
  13. * 将前缀的长度和字符 c 追加到 comp 。
  14. * 返回字符串 comp 。
  15. *
  16. *
  17. *
  18. *
  19. *
  20. * 示例 1:
  21. *
  22. * 输入:word = "abcde"
  23. *
  24. * 输出:"1a1b1c1d1e"
  25. *
  26. * 解释:
  27. *
  28. * 初始时,comp = "" 。进行 5 次操作,每次操作分别选择 "a"、"b"、"c"、"d" 和 "e" 作为前缀。
  29. *
  30. * 对每个前缀,将 "1" 和对应的字符追加到 comp。
  31. *
  32. * 示例 2:
  33. *
  34. * 输入:word = "aaaaaaaaaaaaaabb"
  35. *
  36. * 输出:"9a5a2b"
  37. *
  38. * 解释:
  39. *
  40. * 初始时,comp = ""。进行 3 次操作,每次操作分别选择 "aaaaaaaaa"、"aaaaa" 和 "bb" 作为前缀。
  41. *
  42. * 对于前缀 "aaaaaaaaa",将 "9" 和 "a" 追加到 comp。
  43. * 对于前缀 "aaaaa",将 "5" 和 "a" 追加到 comp。
  44. * 对于前缀 "bb",将 "2" 和 "b" 追加到 comp。
  45. *
  46. *
  47. * 提示:
  48. *
  49. * 1 <= word.length <= 2 * 105
  50. * word 仅由小写英文字母组成。
  51. */
  52. public class Solution {
  53. public String compressedString(String word) {
  54. String comp = "";
  55. for (int i = 0; i < word.length(); i++) {
  56. int count = 1;
  57. char c = word.charAt(i);
  58. while (i+1 < word.length() && c == word.charAt(i+1)){
  59. count++;
  60. i++;
  61. if (count == 9)break;
  62. }
  63. comp += String.valueOf(count) + String.valueOf(c);
  64. }
  65. return comp;
  66. }
  67. }