zoukankan      html  css  js  c++  java
  • 利用字符串重复出现的次数,编写一个方法,实现基本的字符串压缩功能

    /*
     * 利用字符串重复出现的次数,编写一个方法,实现基本的字符串压缩功能,比如字符串aabcccccaaa
     * 会变成a2b1c5a3,若压缩后的字符串没有变短,则返回原来的字符串
     * 
     * 思路:
     * 我们会迭代访问字符串,将字符拷贝到新字符串,并数出重复字符,在这里建立使用stringbuffer而不是用string
     * 
     * */
    
    public class StringCount {
        String compressBetter(String str)
        {
            //检查压缩之后的长度有没有变长?
            int size=countCompression(str);
            if(size>=str.length())
            {
                return str;
            }
            StringBuffer mystr=new StringBuffer();
            char last = str.charAt(0);
            int count=1;
            for(int i=1;i<str.length();i++)
            {
                if(str.charAt(i)==last)//如果是重复字符
                    count++;
                else                    //插入字符的次数和更新last字符
                {
                    mystr.append(last);
                    mystr.append(count);
                    last=str.charAt(i);
                    count=1;
                }
            }
            mystr.append(last);
            mystr.append(count);
            return mystr.toString();
        }
        /*
         * 
         * 该函数计算出压缩后字符串的长度*/
        int countCompression(String str)
        {
            if(str==null || str.isEmpty())
                return 0;
            char last=str.charAt(0);
            int size=0;
            int count=1;
            for(int i=1;i<str.length();i++)
            {
                if(str.charAt(i)==last)
                    count++;
                else
                {
                    last=str.charAt(i);
                    size+=1+String.valueOf(count).length();
                    count=1;
                }
            }
            size+=1+String.valueOf(count).length();
            return size;
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            StringCount obj = new StringCount();
            String str="aabcccccaaa";
            System.out.println(obj.compressBetter(str));
        }
    
    }

    2014-09-0510:31:45

  • 相关阅读:
    DNS服务器安全之通过ipset对DNS异常解析流量的源IP地址进行管控
    C# Windows Api的一些方法 封装 以及 常用参数
    Java基础—异常(1)
    Java基础——异常(2)
    vb6 wininet
    vb6转16进制
    Java 中与(&)短路与(&&)以及 或(|)短路或(||)的关系
    关于面向对象的简单总结
    javaScript的基本规范
    关于TCP传输的三次握手四次挥手策略
  • 原文地址:https://www.cnblogs.com/luoweiKnowledge/p/3957474.html
Copyright © 2011-2022 走看看