我有以下代码返回一个布尔值,指示一个字符串是否可以是另一个字符串的排列。 假设我们使用的是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;
}
答案 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;
}