两个长度为n的字符串的距离定义为这两个字符串对应位置上不同字符的个数。
例如:"babc"和"abba"的距离为3(第0、1、3位置上的字符不同)。
给定m个长度为n的字符串, 生成一个与给定的这个m个字符串的距离之和最小的长度为n的字符串,并输出。
public static void main ( String[] args ) {
String [] arr={"babc","abbc","cbbc"};
System.out.println(calcString(arr,4));
}
/**
* 两个长度为n的字符串的距离定义为这两个字符串对应位置上不同字符的个数。
* 例如:"babc"和"abba"的距离为3(第0、1、3位置上的字符不同)。
* 给定m个长度为n的字符串,
* 生成一个与给定的这个m个字符串的距离之和最小的长度为n的字符串,并输出。
* 例如:给定5个长度为5的字符串["abvsa,"asdwq","hgfvb","qwert","bhugf"],生成一个距离之和最小的字符串
* 思路:获取所有字符串每个位置出现次数最多的那个,拼接
* @param str 给定字符串
* @param n 每个字符串的长度
* @return
*/
public static String calcString(String [] str,int n){
//单个字符串索引
int index=0;
//结果集
String res="";
//用于统计出现个数的map集合
Map<String,Integer> cout=new HashMap<>();
//遍历数组中每个字符串的第i个位置上的
for (int i=0;i<n;i++) {
//使用map统计出现次数
for (String s : str) {
String substring = s.substring(index,index+1);
cout.put(substring,cout.get(substring)==null?1:cout.get(substring)+1);
}
index++;
Set<String> strings = cout.keySet();
//最大值
int maxNum=0;
//最大值的key
String maxKey="";
//遍历求出最大值
for (String string : strings) {
Integer integer = cout.get(string);
if(maxNum<integer){
maxNum=integer;
maxKey=string;
}
}
//初始化map
cout=new HashMap<>();
res+=maxKey;
}
return res;
}