每天一道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行就是如果不相等,统计字符出现的次数