[抄题]:

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.

[暴力解法]:

时间分析:

空间分析:

[优化后]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

在数组中输入一个1 2时,需要start i同时变

[一句话思路]:

往前走多长,然后截断、更新,属于 前向窗口类:end边统计往后走到哪,start边统计可以更新到哪

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. String.valueOf 函数可以将数字转化成字符串。不是.toString,这是针对已有的字符串

  2. 只有count != 1时才需要添加,读题时就要备注特殊条件

[二刷]:

  1. 用等号表示的最末尾一位是n - 1,也需要备注

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

字符型数组应写成char[], 不是chars[]

[总结]:

[复杂度]:Time complexity: O(n) Space complexity: O(1)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[关键模板化代码]:

for 循环+ j 满足条件时移动

 for (int end = 0, count = 0; end < chars.length; end++)
{
count++;
//change if neccessary
if (end == chars.length - 1 || chars[end] != chars[end + 1]) {
chars[start] = chars[end];
start++;

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

Encode and Decode Strings 用各种类的设计,有基础就还行

[代码风格] :

写框架时只能把for的重要事项写好,具体换行还是需要自己理解

class Solution {
public int compress(char[] chars) {
//cc
if (chars.length == 0) {
return 0;
}
//ini
int start = 0; for (int end = 0, count = 0; end < chars.length; end++)
{
count++;
//change if neccessary
if (end == chars.length - 1 || chars[end] != chars[end + 1]) {
chars[start] = chars[end];
start++; //add to only if (count != 1)
if (count != 1) {
char[] arrs = String.valueOf(count).toCharArray();
for (int i = 0; i < arrs.length; i++, start++) {
chars[start] = arrs[i];
}
}
//reset count
count = 0;
}
} //return start;
return start;
}
}

443. String Compression字符串压缩的更多相关文章

  1. [LeetCode] String Compression 字符串压缩

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

  2. 443. String Compression - LeetCode

    Question 443. String Compression Solution 题目大意:把一个有序数组压缩, 思路:遍历数组 Java实现: public int compress(char[] ...

  3. 【leetcode】443. String Compression

    problem 443. String Compression Input ["a","a","b","b"," ...

  4. 443. String Compression

    原题: 443. String Compression 解题: 看到题目就想到用map计数,然后将计数的位数计算处理,这里的解法并不满足题目的额外O(1)的要求,并且只是返回了结果array的长度,并 ...

  5. 443 String Compression 压缩字符串

    给定一组字符,使用原地算法将其压缩.压缩后的长度必须始终小于或等于原数组长度.数组的每个元素应该是长度为1 的字符(不是 int 整数类型).在完成原地修改输入数组后,返回数组的新长度.进阶:你能否仅 ...

  6. LeetCode 443. String Compression (压缩字符串)

    题目标签:String 这一题需要3个pointers: anchor:标记下一个需要存入的char read:找到下一个不同的char write:标记需要存入的位置 让 read指针 去找到下一个 ...

  7. 【LeetCode】443. String Compression 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 使用额外空间 不使用额外空间 日期 题目地址:htt ...

  8. leetcode 443. String Compression

    下面反向遍历,还是正向好. void left(vector<char>& v, bool p(int)) { ; ; ; while (del < max_index) { ...

  9. [LC] 443. String Compression

    Given an array of characters, compress it in-place. The length after compression must always be smal ...

随机推荐

  1. 【sqlite】错误代码整理

    这两天为了一个问题折腾了好久,记载一下. SQLite语句一定要严格按例子来写,例如: "CREATE TABLE PunchData (Id Text primary key, Heigh ...

  2. WCF日志跟踪SvcTraceViewer.exe

    参考: https://msdn.microsoft.com/zh-cn/library/ms732023.aspx https://msdn.microsoft.com/zh-cn/library/ ...

  3. SQLite3的运用

    1.导入库文件:libsqlite3. 2..m文件的代码: // // ViewController.m // SQLite3的运用 // // Created by PengYunjing on ...

  4. 洛谷P2661 信息传递

    传送门 题目大意:每个人每一轮可以把消息传给另一个人,问几轮后某个人可以从人 听到自己的消息. 题解:tarjian缩点,求缩点后缩的点包含的最少的点个数. 代码: 正解 #include<io ...

  5. 图像处理笔记(1): bmp文件结构处理与显示

    1.1图和调色板的概念 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面.那么Windows是如何显示图象的呢? ...

  6. java冒泡排序算法例子

    总结:运行显示数组下标越界说明,数组长度a.length.表示数组的长度,但索引值是要减一的.勿忘 package com.c2; //冒泡排序 //从小到大的顺序排列 public class MA ...

  7. Vue.js:template

    ylbtech-Vue.js: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   1 ...

  8. 1024 Palindromic Number

    题意: 给出一个数N(N<=10^10),最多可操作K次(K<=100),每次操作为这个数和其反转之后的数相加,若得到的结果为回文数,则输出:若在K次迭代后仍然不是回文数,在输出第K次操作 ...

  9. python构造远控

    server端: import socket import subprocess server=socket.socket() server.bind(('127.0.0.1',4444)) serv ...

  10. Android 4学习(9):用户界面 - THE ANDROID WIDGET TOOLBOX

    Android内置了很多View,包括: TextView EditText Chronometer ListView Spinner Button ToggleButton ImageButton ...