每天一道leetcode443-压缩字符串
- 2019 年 10 月 4 日
- 笔记
昨天的题解
题目
每天一道leetcode443-压缩字符串 分类:字符串
题目详述
给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入: "the sky is blue", 输出: "blue is sky the". 说明:
无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
题目详解
思路 代码(安卓机代码可以移动,苹果机不行,最近我在寻找一个新的代码排版,PC端打开没有问题)
先放个图片,代码排版有问题的看图片

test.png
class Solution { public int compress(char[] chars) { int count = 1; int index = 0; for (int i = 0; i < chars.length; i++) { if (i + 1 == chars.length || chars[i] != chars[i+1]) { chars[index++] = chars[i]; if (count > 1) { String temp = String.valueOf(count); for(int k=0;k<temp.length();k++) chars[index++] = temp.charAt(k); } count = 1; } else { count++;//统计重复字符的个数 } } return index; } }
代码讲解
- 6行就是如果一个字符和它的下一个字符不相等了,首先是chars[index] = chars[i] 这行就是把比如a,a,b,b,b就是把数组i的位置指向第一个b,好重新开始新的一轮的计算重复字符的个数;
- 8-12行就是如果字符的个数是大于1的那么就需要统计这个数字,然后10-11行就是把这个数字的变成字符串,取每一个字符赋值到字符数组中
- 13行 重新把count置位1因为一个字符至少出现一次
- 15-17行就是如果不相等,统计字符出现的次数