From b8d34a51a30e54235be4c39e8bce1848aef06f74 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Tue, 31 Aug 2021 11:32:49 +0800 Subject: [PATCH] =?UTF-8?q?443:=E5=8E=8B=E7=BC=A9=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leetcode/editor/cn/StringCompression.java | 99 +++++++++++++++++++ .../cn/doc/content/StringCompression.md | 54 ++++++++++ 2 files changed, 153 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/StringCompression.java create mode 100644 src/main/java/leetcode/editor/cn/doc/content/StringCompression.md diff --git a/src/main/java/leetcode/editor/cn/StringCompression.java b/src/main/java/leetcode/editor/cn/StringCompression.java new file mode 100644 index 0000000..1df38a6 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/StringCompression.java @@ -0,0 +1,99 @@ +//给你一个字符数组 chars ,请使用下述算法压缩: +// +// 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 : +// +// +// 如果这一组长度为 1 ,则将字符追加到 s 中。 +// 否则,需要向 s 追加字符,后跟这一组的长度。 +// +// +// 压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会 +//被拆分为多个字符。 +// +// 请在 修改完输入数组后 ,返回该数组的新长度。 +// +// 你必须设计并实现一个只使用常量额外空间的算法来解决此问题。 +// +// +// +// 示例 1: +// +// +//输入:chars = ["a","a","b","b","c","c","c"] +//输出:返回 6 ,输入数组的前 6 个字符应该是:["a","2","b","2","c","3"] +//解释: +//"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。 +// +// +// 示例 2: +// +// +//输入:chars = ["a"] +//输出:返回 1 ,输入数组的前 1 个字符应该是:["a"] +//解释: +//没有任何字符串被替代。 +// +// +// 示例 3: +// +// +//输入:chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"] +//输出:返回 4 ,输入数组的前 4 个字符应该是:["a","b","1","2"]。 +//解释: +//由于字符 "a" 不重复,所以不会被压缩。"bbbbbbbbbbbb" 被 “b12” 替代。 +//注意每个数字在数组中都有它自己的位置。 +// +// +// +// +// 提示: +// +// +// 1 <= chars.length <= 2000 +// chars[i] 可以是小写英文字母、大写英文字母、数字或符号 +// +// Related Topics 双指针 字符串 👍 260 👎 0 + +package leetcode.editor.cn; + +//443:压缩字符串 +class StringCompression { + public static void main(String[] args) { + //测试代码 + Solution solution = new StringCompression().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public int compress(char[] chars) { + char ch = chars[0]; + String str = ""; + int count = 1; + for (int i = 1; i < chars.length; i++) { + if (chars[i] == ch) { + count++; + } else { + if (count > 1) { + str += "" + ch + count; + } else { + str += "" + ch; + } + ch = chars[i]; + count = 1; + } + } + if (count > 1) { + str += "" + ch + count; + } else { + str += "" + ch; + } + for (int i = 0; i < str.length(); i++) { + chars[i] = str.charAt(i); + } + return str.length(); + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/doc/content/StringCompression.md b/src/main/java/leetcode/editor/cn/doc/content/StringCompression.md new file mode 100644 index 0000000..8177c06 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/doc/content/StringCompression.md @@ -0,0 +1,54 @@ +

给你一个字符数组 chars ,请使用下述算法压缩:

+ +

从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符

+ + + +

压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 1010 以上,则在 chars 数组中会被拆分为多个字符。

+ +

请在 修改完输入数组后 ,返回该数组的新长度。

+ +

你必须设计并实现一个只使用常量额外空间的算法来解决此问题。

+ +

 

+ +

示例 1:

+ +
+输入:chars = ["a","a","b","b","c","c","c"]
+输出:返回 6 ,输入数组的前 6 个字符应该是:["a","2","b","2","c","3"]
+解释:
+"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。
+
+ +

示例 2:

+ +
+输入:chars = ["a"]
+输出:返回 1 ,输入数组的前 1 个字符应该是:["a"]
+解释:
+没有任何字符串被替代。
+
+ +

示例 3:

+ +
+输入:chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"]
+输出:返回 4 ,输入数组的前 4 个字符应该是:["a","b","1","2"]。
+解释:
+由于字符 "a" 不重复,所以不会被压缩。"bbbbbbbbbbbb" 被 “b12” 替代。
+注意每个数字在数组中都有它自己的位置。
+
+ +

 

+ +

提示:

+ + +
Related Topics
  • 双指针
  • 字符串

  • 👍 260
  • 👎 0
  • \ No newline at end of file