字符串压缩

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12594549.html

字符串压缩(150min)

题目链接:https://leetcode-cn.com/problems/compress-string-lcci/

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

示例1:

输入:"aabcccccaaa"
输出:"a2b1c5a3"
示例2:

输入:"abbccd"
输出:"abbccd"
解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
提示:

字符串长度在[0, 50000]范围内。

题解:

          题意:给定一个字符串,统计相邻相同字母个数,并把相同字母的位置用一个字母加相同字母个数表示。

          方法:统计相邻相同字母个数,把相同字母个数加入到出现的字母后面。

          思路:

                  1.定义一个StringBuilder 类型的字符串str存放相同字母的一个字母。

                   2.定义一个统计相同字母个数的数组arr。

                  3.定义一个统计相同字母个数的变量len,从第二个字母开始遍历,如果后一个字母和前一个字母相同,则len加一。如果后一个字母和前一个字母不同则把后一个字母加入到str中,并把统计的相同字母个数赋                       值给arr。

                  4.遍历str,把统计相同字母个数的数组arr中的数字加入到每个字母后面。

                  5.判断压缩的字符串是否比没有压缩前的字符串长度小。

 说明:下面代码是没有成功的,也不知道为啥在统计相同字母个数的数组哪里长度越界。

代码如下:

class Solution {
    public String compressString(String S) {
    if(S.length()==0)
    return null;
    if(S.length()==1)
    return S;
      int len=1;//统计相同字母个数
      int arr[]=new int[50000];//存储相同字母个数
      int k=0;//数组下标
      StringBuilder str=new StringBuilder("S.charAt(0)");//第一个字母存入
      int i=0;
      for( i=1;i<S.length();i++)//从第二个字母开始遍历
      {
         if(S.charAt(i)==(S.charAt(i-1)))//如果后一个字母和前一个字母相同
         {
            len++;//统计相同字母个数
         }
         else//后一个字母和前一个字母不相同时
         {  
            arr[k++]=len;//把统计相同字母的个数存入数组中
            str=str.append(S.charAt(i));//把此时和前面一个字母不同的字母加入到字符串中
            len=1;//重新统计相同字母个数
         }
         
      }
      if(S.charAt(i-1)==(S.charAt(i-2)))//最后有两个及两个以上字母相同的情况在上面的if条件中只统计了个数,没有进入到else语句中,把最后相同字母个数存入数组中
      {
         arr[k++]=len;//如果最后有两个及两个以上的字母相同,把统计相同字母的个数存入数组中 
      }
      
      for(int j=0;j<str.length();j++)//在每个字母后面加入个数
      {
          
        str=str.append(arr[j]);
          
      }
      if(str.length()<S.length())//如果压缩后的字符串长度小于压缩前的,输出压缩的后的字符串
      {
         return str.toString();
      }
      else 
         return S;
    }
}

报错截图:

原文地址:https://www.cnblogs.com/ping2yingshi/p/12594549.html