java字符统计+字符串压缩

要实习了。突然发现自己好像什么都不会,就去看看题吧。在网上看到一个字符串压缩的题。看了一眼,感觉用python很简单。一个for循环+字典就可以搞定。

但是呢,主要还是java。下面就用java来实现一下。未检测长度是否小于10000

题目:

利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。

给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。

测试样例
"aabcccccaaa"
返回:"a2b1c5a3"
\

这道题的思路借助python思路实现。在python中,简洁的语法可以轻松实现、
但是呢,java也是非常不错的。
思路如下:
字符统计,用到map集合。key存放我们的字符串,values存放个数。 在python中是字典,java中是map
把字符串分割成数组,循环。把当前字符存如map集合。如果集合里面没有当前key,则设置values为1,否则value+1即可。用三目表达式即可
一开始写的时候。以为map和python字典一样,可以有一个默认返回值。测试发现如果当前key没有内容,返回的是null。
执行完以上操作。就可以统计到每个字符的个数了。
字符串压缩里面统计好的map循环。判断每个key的value是否不等于1。如果不等于1,说明存在相同的字符。则标注一下。
最后根据标注状态,打印即可。
public class Demo {
    
    
     public static void checkDifferent(String iniString) {
             Map<String, Integer> map=new HashMap<>();
             String[] a=    iniString.split("");
             for (String string : a) {
                 map.put(string, map.get(string)==null?1:map.get(string)+1);

            }
             boolean flag=true;
             for (Map.Entry<String, Integer>  m: map.entrySet()) {
                if(m.getValue()!=1) {
                    flag=false;
                }
            }
             if(flag) {
                 System.out.println(iniString);
             }else {
                 for (Map.Entry<String, Integer> m : map.entrySet()) {
                    System.out.print(m.getKey()+m.getValue());
                }
             }
        }
        
        
        
public static void main(String[] args) {
    checkDifferent("aabbc");
}

 

posted @ 2018-11-23 21:16  暮雪超霸  阅读(592)  评论(0编辑  收藏  举报