zoukankan      html  css  js  c++  java
  • LeetCode_443. String Compression

    443. String Compression

    Easy

    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.
    

    Note:

    1. All characters have an ASCII value in [35, 126].
    2. 1 <= len(chars) <= 1000.
    package leetcode.easy;
    
    public class StringCompression {
    	public int compress(char[] chars) {
    		int indexAns = 0, index = 0;
    		while (index < chars.length) {
    			char currentChar = chars[index];
    			int count = 0;
    			while (index < chars.length && chars[index] == currentChar) {
    				index++;
    				count++;
    			}
    			chars[indexAns] = currentChar;
    			indexAns++;
    			if (count != 1) {
    				for (char c : String.valueOf(count).toCharArray()) {
    					chars[indexAns] = c;
    					indexAns++;
    				}
    			}
    		}
    		return indexAns;
    	}
    
    	@org.junit.Test
    	public void test() {
    		char[] chars1 = { 'a', 'a', 'b', 'b', 'c', 'c', 'c' };
    		char[] chars2 = { 'a' };
    		char[] chars3 = { 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b' };
    		System.out.println(compress(chars1));
    		System.out.println(compress(chars2));
    		System.out.println(compress(chars3));
    	}
    }
    
  • 相关阅读:
    NGBOSS转型在即:COTS初露锋芒
    [原]CmsEasy安装,后台“内容管理”页面空白
    CentOS5安装mcrypt问题
    [转]Grub安装修复
    [转]BOSS3接近尾声
    多渠道整合开启NGBOSS第一步
    [原][转]TUXEDO与ORACLE数据库的互连
    [译]Oracle Data Cartridge| Oracle数据筒介绍
    [译]ORACLE数据弹药桶(Data Cartridge)简介
    [原]再说精度用于显示的数字出现精度问题的处理(Perl/Java)
  • 原文地址:https://www.cnblogs.com/denggelin/p/11956851.html
Copyright © 2011-2022 走看看