如何计算多字符串中char的出现次数?

时间:2016-12-08 23:10:59

标签: java string algorithm

我的问题很特别,

给那些字符串

          123456  
String1   ABCD
String2    BDD
String3     CDEF

我们可以看到

  • 第1列中的A数为1.
  • 第2列中的B数为2.
  • 第3列中的C数为2.
  • 第3列中的D数为1.
  • 第4列中的D数为3.
  • 第5列中的E数为1.
  • 第6列中的F数为1.

这些计算的目的是获得每列中出现最多的字符。

我可以用来处理这个问题的最佳DataStructure是什么?知道我只知道执行时的每个字符串的长度。

我已经知道的信息是每个String开始的列的n°。

我的想法,我认为不是最好的是迭代列n°并且couting每个char出现多少并且最终发现大多数出现char。

你有更好的解决方案吗?

信息:我的字符串只能包含那些字符[A,B,C,D,E,F] 谢谢。

1 个答案:

答案 0 :(得分:1)

public class Main {
    public static void main(String[] args) {
        String str1 = "ABCD  ";
        String str2 = " BDD  ";
        String str3 = "  CDEF";
        String[] reversed = getReversed(str1, str2, str3);  // reverse rows with columns

        for(int i=0; i< reversed.length; i++){
            String trimedString = reversed[i].trim();  // removes spaces that around the string
            System.out.println(findMaxOccurrenceCharValue(trimedString));  // counts the maximum occurrence char
        }
    }

    private static String[] getReversed(String str1, String str2, String str3){
        char[] s1 = str1.toCharArray();
        char[] s2 = str2.toCharArray();
        char[] s3 = str3.toCharArray();

        String[] newStr = new String[6];
        for(int i =0; i<6; i++){
            newStr[i] = "" + s1[i] + s2[i] + s3[i];
        }
        return newStr;
    }

    private static String findMaxOccurrenceCharValue(String str) {
        char[] array = str.toCharArray();
        int[] count = new int[1000];
        for(char c: array){
            count[c]++;
        }

        // find the max occurrence character and number of occurrence
        String maxCharacter = "";
        int maxValue = -1;
        for(int i=0;i< array.length;i++){
            if(count[array[i]] > maxValue){
                maxValue = count[array[i]];
                maxCharacter = String.valueOf(array[i]);
            }
        }
        return  maxCharacter + "=" + maxValue;
    }
}

输出:

A=1
B=2
C=2
D=3
E=1
F=1