两个长度为n的字符串的距离定义为这两个字符串对应位置上不同字符的个数。例如:"babc"和"abba"的距离为3(第0、1、3位置上的字符不同)。给定m个长度为n的字符串,生成一个与给定的这个m个字符

两个长度为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;
    }

猜你喜欢

转载自blog.csdn.net/qq_39648029/article/details/105810150