• 字符串压缩


    此博客链接: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;
        }
    }

    报错截图:

  • 相关阅读:
    enyo学习之enyo.Object类
    java.lang.Object
    Nginx转发匹配规则
    工具类Redis工具类
    Redis从0到精通Redis.conf详解
    工具类类型转换器
    Docker入门到精通
    Redis从0到精通Jedis
    工具类字符集工具类
    Spock高质量单元测试实操篇
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12594549.html
Copyright © 2020-2023  润新知