一个字符串 Sting a=”aaabbdcfeeswdfttrrccaa”,请找出重复次数最多的字符,并打印出 数量和字符,如果有多个重复次数最多的都打印出来

解决方案 »

  1.   

    用C语言我会。考研的时候考过这个题JAVA不太熟悉。
      

  2.   

    可以利用string.sort()方法给a排序,然后遍历a,看相同字符的最大长度
      

  3.   

    粗略给一个小写字母的算法。
    int counter[] = new int[26];
    String buffer = "aaabbdcfeeswdfttrrccaa";
    for (int i = 0; i < buffer.length(); i++) {
    char c = buffer.charAt(i);
    counter[c - 'a']++;
    }
    int max = 0;
    for (int i = 0; i < counter.length; i++) {
    if (counter[i] > max)
    max = counter[i];
    }
    System.out.println("重复次数 "+max);
    for (int i = 0; i < counter.length; i++) {
    if(counter[i]==max)
    System.out.print((char)('a'+i));
    }
      

  4.   

    import java.util.regex.*;
    public class Count {
      
     
      public static  void main(String[] args) {
      test("AAAAAAAAAAbcccccccBBBBBBBBBB");
      }
      public static void test(String str) {
      int[] num = new int[str.length()];
      char[] value = new char[str.length()];
      int size = 0;
      while(str.length()>0){
      char c = str.charAt(0);
      int count = 0;
      int index = str.indexOf(c);
      while(index!=-1) {
      count++;
      index = str.indexOf(c,index+1);
      }
      System.out.println(c+" : "+count) ;
      
      str =  str.replaceAll(""+c,new String("")).trim();
      }
      }}一个程序,打印出每个字符个数
    楼主自己修改一下就可以了
      

  5.   

    补句
    如果int counter[] = new int[26];改为int counter[] = new int[256];
    for (int i = 0; i < buffer.length(); i++) {
    char c = buffer.charAt(i);
    counter[c - 'a']++;
    }
    中的counter[c - 'a']++;可以改为
    counter[c]++;
      

  6.   

    刚好有点空,帮楼主写一下,思维比较简单,虽然不是效率最优,但可读性较好,运行通过(楼上几位都没有写完整,楼主是估计是偷懒型的,我就舍身助人了)。虽然简单,但循环还真不少:
    import java.util.*;
    public class Test {

    //找出重复次数最多的字符,并打印出数量和字符
    public static void main(String[] args) {
    String a = "aaabbdcfeeswdfttrrccaa";
    List ls = new LinkedList();
    Test test = new Test();
    for(int i=0; i<a.length(); i++){
    if(!test.isHave(ls,(a.charAt(i)+""))){
    ls.add(a.charAt(i)+"");
    }
    }
    //保存相应的位置的字母的个数
    int[] ret = new int[ls.size()];
    int max =0; //最大数
    for(int i=0; i<ls.size(); i++){
    ret[i] = test.getNum(ls.get(i).toString(),a);
    if(ret[i]>max){
    max = ret[i];
    }
    }
    //检查个数最大的,返回位置列表
    List ls2 = new LinkedList();
    for(int i=0; i<ret.length;i++){
    if(ret[i]==max){
    ls2.add(i+"");
    }
    }

    //遍历ls2,打印出相应字母和个数
    System.out.println("\n打印出个数最多的字母及个数:");
    for(int i=0; i<ls2.size(); i++){
    int m = Integer.parseInt(ls2.get(i).toString());
    System.out.println("字母:"+ls.get(i).toString()+" 个数:"+ret[m]);
    }

    System.out.println("\n打印出所有字母及个数:");
    for(int i=0; i<ret.length;i++){
    System.out.println("字母:"+ls.get(i).toString()+" 个数:"+ret[i]);
    }
    }

    //查询该列表 ls 是否有该字符
    private boolean isHave(List ls, String k){
    boolean flag = false;
    for(int i=0; i<ls.size(); i++){
    if(ls.get(i).toString().equals(k)){
    flag = true;
    break;
    }
    }
    return flag;
    }

    //查询 a 中有几个 k
    private int getNum(String k, String a){
    int j=0;
    for(int i=0; i<a.length(); i++){
    if((a.charAt(i)+"").equals(k)){
    j++;
    }
    }
    return j;
    }
    }
    运行结果:
    打印出个数最多的字母及个数:
    字母:a 个数:5打印出所有字母及个数:
    字母:a 个数:5
    字母:b 个数:2
    字母:d 个数:2
    字母:c 个数:3
    字母:f 个数:2
    字母:e 个数:2
    字母:s 个数:1
    字母:w 个数:1
    字母:t 个数:2
    字母:r 个数:2
      

  7.   

    谢谢jackyzgm(昵称),牛人!也谢谢其他朋友
      

  8.   

    str =  str.replaceAll(""+c,new String("")).trim();  这句代码里的 replaceAll  是什么意思啊?
      

  9.   

    .386
    .model flatextrn MessageBoxA:proc
    extrn ExitProcess:proc.data
    @@datastart equ $
    indata db "aaabbdcfeeswdfttrrccaa"
    @@dataLen equ ($-@@datastart)
    count db @@dataLen dup(0) msg db "出现次数最多的字母是:"
    number db 4 dup(32)
    db "一共出现了"
    times db 4 dup(32)
    db "次"
    zero db 0
    nofind db "出现次数相等"
    db 0maxcount db 0
    maxnumber db 0
    secondcount db 0
    secondnumber db 0
    .codemain:
    lea esi, indata
    mov ecx, @@dataLen
    total:
    xor ebx, ebx
    mov ah, byte ptr[esi]
    push ecx
    mov ecx, @@dataLen
    scan:
    lea edi, indata
    add edi, ebx
    mov dh, byte ptr[edi]
    cmp dh, ah
    je find
    inc ebx
    loop scan
    find:
    pop ecx
    lea edi, count
    add edi, ebx
    inc byte ptr[edi]
    mov dh, [edi]
    cmp ah, maxnumber
    ;如果是出现次数最多的数
    je max
    cmp dh, maxcount
    jb next
    jne gt
    ;个数等于
    mov secondcount, dh
    mov secondnumber, ah
    jmp next
    ;大于
    gt:
    mov maxcount, dh
    mov maxnumber, ah
    jmp next
    max:
    inc maxcount
    next:
    inc esi 
    loop total;填写结果
    mov dh, maxcount
    lea esi, times
    add esi, 2
    call bititoa
    mov al, maxnumber
    mov number, al;如果最大出现次数相等
    mov ah, maxcount
    cmp ah, secondcount
    jne displayresult
    mov ah, maxnumber
    cmp ah, secondnumber
    ;如果是同一个数
    je displayresult
    push 0
    push offset zero
    push offset nofind
    push 0
    call MessageBoxA
    jmp exitdisplayresult:
    push 0
    push offset zero
    push offset msg
    push 0
    call MessageBoxAexit:
    push 0
    call ExitProcess;数字转字符
    ; dh  = 输入的数字
    ; esi = 输出地址
    bititoa proc
    push ebp
    mov ebp, esp
    pushad
    pushfd
    mov cl, 10
    mov al, dh
    nextnumber:
    xor ah, ah
    div cl
    add ah, 48
    mov byte ptr[esi], ah
    dec esi
    cmp al, 0
    jne nextnumber
    popfd
    popad
    pop ebp
    ret
    bititoa endpend main
    编译:
    tasm32 /m3 /ml total1,,;
    tlink32 /Tpe /aa total1,total1,,d:\tasm\lib\import32.lib
    pause
      

  10.   

    #include <map>
    #include <vector>
    #include <set>
    #include <iostream>
    #include <windows.h>#pragma comment(lib, "winmm")
    int maxInt()
    {
    std::multiset<int> s;
    int number[] = {1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2,1,5,2,3,4,5,6,3,7,9,8,4,3,2,5,2,3,4,5,6,3,7,9,8,4,3,2};

    int cnt = sizeof(number)/sizeof(int);
    for (int i=0;i<cnt;i++)
    {
    s.insert(number[i]);
    } int max = 0;
    int id = 0; for(int i=0;i<cnt;i++)
    {
    int tmp;
    tmp = s.count(number[i]);
    if (max < tmp)
    {
    max = tmp;
    id = i;
    }
    }
    return id;
    }void main()
    {
    int pre = timeGetTime();
    int result = maxInt();
    int delta = timeGetTime() - pre;
    std::cout<<result<<'\n' <<"time: "<<delta<<'\n';}我的方法 时间111毫秒
      

  11.   

    用比较笨的方法来做abc ="AlkjA;lkjlkjAlkAkjAlkjAAAA" 
    if instr(abc,"A")>0 then 
    abctext=split(abc,"A") 
    for j=0 to ubound(abctext) 
    next 
    end if 
    response.write j-1 j-1就是里面存在A的数量值了