Java 使用字符数组时排列检查器的输出不正确
我有下面的代码返回一个布尔值,指示一个字符串是否可以是另一个字符串的置换。 假设我们使用的是ASCII字符集 当传递以下两个字符串时,输出仍然为true System.out.println(checkPermutation(“dog”,“odf”)) 少了什么Java 使用字符数组时排列检查器的输出不正确,java,string,Java,String,我有下面的代码返回一个布尔值,指示一个字符串是否可以是另一个字符串的置换。 假设我们使用的是ASCII字符集 当传递以下两个字符串时,输出仍然为true System.out.println(checkPermutation(“dog”,“odf”)) 少了什么 public static boolean checkPermutation(String s1, String s2) { if(s1.length() != s2.length()) { return fa
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;
}
公共静态布尔校验置换(字符串s1、字符串s2){
如果(s1.length()!=s2.length()){
返回false;
}
字符[]个字母=新字符[128];
for(字符c:s1.toCharArray()){
字母[c]++;
}
对于(int i=0;i
只是给你一个想法。您可以使用字符串的indexOf
方法查找两个字符串中是否都存在字符:
for (int i = 0; i < s2.length(); i++) {
if (s1.indexOf(s2.charAt(i)) == -1) {
return false;
}
}
for(int i=0;i
您的问题似乎是使用字符数组来存储出现次数,而不是整数数组(我猜字母[c]
永远不会小于零,因为字符不能小于零)。我修改了你的代码,这应该可以:
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;
}
公共静态布尔校验置换(字符串s1、字符串s2){
如果(s1.length()!=s2.length()){
返回false;
}
int[]字母=新int[128];
for(字符c:s1.toCharArray()){
字母[c]++;
}
对于(int i=0;i
@NimitPatel:Java数组元素(以及类和实例字段)总是初始化为适当的零,而char
的值是'\u0000'
请特别注意(Java)char
是无符号的,因此递减(char)0
会得到字符\uFFFF
,它是