使用char数组时,Permutation检查程序的输出不正确

时间:2017-02-12 01:54:14

标签: java string

我有以下代码返回一个布尔值,指示一个字符串是否可以是另一个字符串的排列。 假设我们使用的是ASCII字符集

传递以下2个字符串时,输出仍为true         System.out.println(checkPermutation(" dog"," odf"));

缺少什么?

public static boolean checkPermutation(String s1, String s2) {

    if(s1.length() != s2.length()) {
        return false;
    }

    char[] letters = new char[128];
    for(char c : s1.toCharArray()) {
        letters[c]++;
    }

    for(int i = 0; i < s2.length(); i++) {
        int c = (int) s2.charAt(i);
        letters[c]--;
        if(letters[c] < 0) {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:0)

只是为了给你一个主意。您可以使用indexOf字符串方法来查找两个字符串中是否存在字符:

for (int i = 0; i < s2.length(); i++) {
    if (s1.indexOf(s2.charAt(i)) == -1) {
        return false;
    }
}

答案 1 :(得分:0)

您的问题似乎是使用字符数组来存储出现次数,而不是整数数组(我猜测letters[c]永远不会小于零,因为char不能小于零)。我修改了你的代码,这应该可行:

public static boolean checkPermutation(String s1, String s2) {

    if(s1.length() != s2.length()) {
        return false;
    }

    int [] letters = new int[128];
    for(char c : s1.toCharArray()) {
        letters[c]++;
    }

    for(int i = 0; i < s2.length(); i++) {
        int c = (int) s2.charAt(i);
        letters[c]--;
        if(letters[c] < 0) {
        return false;
        }
    }
    return true;
}