话不多说:直接上题:
            输入:AAABBBCD
            输出:3A3BCD            输入:ABCCCDDEF
            输出:AB3C2DEF实际上就是把连续出现的字符用数字表示,这个程序用JAVA怎么写?

解决方案 »

  1.   

        public static String transform(final String input){
            char[] data = input.toCharArray();
            LinkedHashMap<Character,Integer> map = new LinkedHashMap<Character,Integer>();
            for(char c:data){
                if(!map.containsKey(c)){
                    map.put(c,1);
                }else{
                    map.put(c,map.get(c)+1);
                }
            }
            StringBuilder builder = new StringBuilder();
            for(char c:map.keySet()){
                if(map.get(c) != 1){
                    builder.append(map.get(c));
                }
                builder.append(c);
            }
            return builder.toString();
        }
        public static void main(final String[] args) {
            System.out.println(transform("AAABBBCD"));
            System.out.println(transform("ABCCCDDEF"));
        }
      

  2.   

    本帖最后由 AWUSOFT 于 2011-04-11 10:42:29 编辑
      

  3.   

    可用的方法太多
    也不用开额外的map存储
    直接用自动机的一些概念就可以秒杀
    final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab";   
    int length = str.length();   
    char temp = str.charAt(0);   
    int start = 0;   
    for(int i=1;i<length;i++) {   
        //循环比较,如果在某个位置的字符不等于temp,那么就输出start-i的子串   
        if(temp != str.charAt(i)) { 
         System.out.print(String.valueOf(temp)+(i-start));
    //         System.out.println(str.substring(start,i));   
            start = i;   
            temp = str.charAt(i);   
        }   
        //特殊情况处理   
        if(i == length -1) {
         System.out.print(temp+"1");
    //         System.out.println(str.substring(start, length));   
        }   
    }
    或者直接用正则秒杀,更快
    final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab";   
    String regex = "(?<=(\\S))(?!\\1)";   
    String []k = str.split(regex);   
    for(int i = 0;i<k.length;i++){
    System.out.print(k[i].charAt(0)+""+k[i].length());
    //     System.out.println(k[i]);   
       } 
      

  4.   

    本帖最后由 AWUSOFT 于 2011-04-11 11:08:19 编辑
      

  5.   


    public static void transform(String src) {
    StringBuilder builder = new StringBuilder();
    int len = src.length();
    char curr = 0;
    int times = 1;
    for (int i = 0; i < len; ++i) {
    curr = src.charAt(i);
    char next = 0;
    try {
    next = src.charAt(i + 1);
    } catch (IndexOutOfBoundsException e) {
    }
    if (curr != next) {
    if (times > 1) {
    builder.append(times);
    }
    builder.append(curr);
    times = 1;
    } else {
    ++times;
    }
    }
    System.out.println(builder.toString());
    } public static void main(String[] args) {
    transform("AAABBCD");
    transform("ABCCCDDEF ");
    }