[英]How do I count the number of occurrences of a char in a Multiple String?
我的问题很特别,
给那些弦乐
123456
String1 ABCD
String2 BDD
String3 CDEF
我们可以看到
这些计算的目的是获得每列中出现最多的char。
我可以用来处理这个问题的最佳DataStructure是什么? 知道我只知道执行时的每个字符串的长度。
我知道的信息是每个String开始的列的n°。
我的想法,我认为它不是最好的是迭代列n°和couting每个char出现多少,并最终发现大多数发生char。
你有更好的解决方案吗?
info:我的字符串只能包含那些char [A,B,C,D,E,F]谢谢。
浏览此示例代码,您可以将字符串作为列表插入,这样代码中的字符串数量就不会受到任何限制,但会给出正确的输出。 我已经在需要的地方添加了内联注释。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class StringOperation {
public static void main(String[] args) {
List<String> stringList=new ArrayList<String>();
stringList.add("ABCD");
stringList.add(" BDD");
stringList.add(" CDEF");
stringList.add("ABCD");
char[][] array=getTwoDimentionArray(stringList);
for (int i = 0; i < array.length; i++) {
char[] cs = array[i];
numberOfCharactorsinString(cs, i);
}
}
//This method will create two dimension array from String list same time it will convert columns in to rows
public static char[][] getTwoDimentionArray(List<String> list){
char[][] twoDimenArray=null;
int maxLength=0;
for (String strings : list) {
if(maxLength<strings.length()){
maxLength=strings.length();
}
}
twoDimenArray=new char[maxLength][list.size()];
for (int i = 0; i < list.size(); i++) {
char[] charArray=list.get(i).toCharArray();
for (int j = 0; j < charArray.length; j++) {
twoDimenArray[j][i] = charArray[j];
}
}
return twoDimenArray;
}
//This method will return the char occurrences in the given char array
public static void numberOfCharactorsinString(char[] charArray,int count){
//Here we use set to identify unique chars in the char array
Set<Character> uniqueSet=new HashSet<Character>();
int forcount=0;
for (Character charVar : charArray) {
int occurent=1;
//check whether the searching char is not empty and not a space and not in previously counted
if( charVar!=Character.MIN_VALUE && charVar!=' ' && !uniqueSet.contains(charVar) && forcount<charArray.length){
uniqueSet.add(charVar);
for (int x=forcount+1;x<charArray.length;x++ ) {
if(charArray[x]==charVar){
occurent++;
}
}
System.out.println("The number of "+charVar+" in column "+(count+1)+" is "+occurent+".");
}
forcount++;
}
}
}
如果你提供输入(请注意我在第4行添加了额外的输入)
String1 ABCD
String2 BDD
String3 CDEF
String1 ABCD
出局将如下:
The number of A in column 1 is 2.
The number of B in column 2 is 3.
The number of C in column 3 is 3.
The number of D in column 3 is 1.
The number of D in column 4 is 4.
The number of E in column 5 is 1.
The number of F in column 6 is 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.