如何检查字符串是否包含Java中所有重复的字母?

时间:2018-05-31 13:41:58

标签: java

例如,字符串abba包含所有重复的字母,对于这种字符串,我需要能够返回某个值。我有以下代码,但这只告诉我像“aaaa”这样的字符串是否包含所有相同的字母,并且不适用于包含两种类型的重复字母的字符串。

public static boolean checkAllRepeated(String input)
    {
        char[] chars = input.toCharArray();
        int[] counts = new int[chars.length];

        int n = input.length();
        for (int i = 1; i < n; i++)
            if (chars[i] != chars[0])
            return false;

        return true;
    }

4 个答案:

答案 0 :(得分:2)

如果我理解正确,如果您的输入字符串包含仅出现一次的字符,您希望函数返回false吗?

public static boolean checkAllRepeated(String input)
{
    Map<Character, Integer> map = new HashMap<>();

    for (Character c : input.toCharArray()){
        map.putIfAbsent(c, 0);
        map.put(c, map.get(c)+1);
    }
    return map.values().stream().noneMatch(i -> i == 1);
}

答案 1 :(得分:1)

地图应该很容易,

String input = "aabbcc";

Map<Character, Integer> unique = new HashMap<>();
for(Character aChar : input.toCharArray()){
   if(unique.get(aChar) != null) {unique.put(aChar, unique.get(aChar) + 1);}
    else { unique.put(aChar, 1); } 
}
if(unique.containsValue(1)){System.out.println("no duplicates"); }

答案 2 :(得分:0)

对于一个字符串,其中只有一个字符不重复,即一个字符的出现是奇数,那么你可以按照异或操作

public char solution(char[] cs) {
        if (cs.length > 0) {
            int i;
            int res = 0;
            for (i = 0; i < cs.length; i++) {
                res = res ^ cs[i];
            }
            return (char) res;
        }
        return (char) -1;
    }

答案 3 :(得分:0)

据我所知,如果只有一个字符没有重复,那么返回false,这将有助于此目的。

public static boolean checkAllRepeated(String input)
        {
            char[] chars = input.toCharArray();
            int counts;

            int n = input.length();
            for (int i = 1; i < n; i++){
                counts =1;
                 for (int j = 0; j < n; j++){
                  if (j != i  && chars[i] == chars[j]) counts++;
                }
    if(counts==1)return false;

        }
            return true;
        }