LeetCode String Compression
原題鏈接在這里:https://leetcode.com/problems/string-compression/description/
題目:
Given an array of characters, compress it?in-place.
The length after compression must always be smaller than or equal to the original array.
Every element of the array should be a?character?(not int) of length 1.
After you are done?modifying the input array?in-place, return the new length of the array.
Follow up:
Could you solve it using only O(1) extra space?
Example 1:
Input: ["a","a","b","b","c","c","c"]Output: Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"]Explanation: "aa" is replaced by "a2". "bb" is replaced by "b2". "ccc" is replaced by "c3".Example 2:
Input: ["a"]Output: Return 1, and the first 1 characters of the input array should be: ["a"]Explanation: Nothing is replaced.Example 3:
Input: ["a","b","b","b","b","b","b","b","b","b","b","b","b"]Output: Return 4, and the first 4 characters of the input array should be: ["a","b","1","2"].Explanation: Since the character "a" does not repeat, it is not compressed. "bbbbbbbbbbbb" is replaced by "b12". Notice each digit has it's own entry in the array.題解:
計(jì)數(shù)連續(xù)相同char的個(gè)數(shù)加在后面.
Time Complexity: O(chars.length). Space: O(1).
AC Java:
1 class Solution { 2 public int compress(char[] chars) { 3 if(chars == null || chars.length == 0){ 4 return 0; 5 } 6 7 int mark = 0; 8 int write = 0; 9 for(int i = 0; i<chars.length; i++){ 10 if(i+1==chars.length || chars[i]!=chars[i+1]){ 11 chars[write++] = chars[mark]; 12 if(mark<i){ 13 for(char c : (""+(i-mark+1)).toCharArray()){ 14 chars[write++] = c; 15 } 16 } 17 mark = i+1; 18 } 19 } 20 21 return write; 22 } 23 }?
轉(zhuǎn)載于:https://www.cnblogs.com/Dylan-Java-NYC/p/8202915.html
總結(jié)
以上是生活随笔為你收集整理的LeetCode String Compression的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 监听webView滑动距
- 下一篇: 数控加工仿真系统 - FANUC OI