仅当所有字符不同时才会提供正确的输出,但在第一个索引字符后面有一些重复的字符时会失败。请指导计算字符串中的不同字符
public int diff(String str) {
int count = 0;
char ch = str.charAt(0);
for (int i = 0; i < str.length(); i++) {
if (ch != str.charAt(i)) {
count++;
}
}
return count+1;
}
}
答案 0 :(得分:1)
如果当前字符不在当前位置之前的字符串中,您只需要检查。
这应该可以解决问题:
public static int diff(String str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
char current = str.charAt(i);
if (!str.substring(0, i).contains(current+"")) {
count++;
}
}
return count;
}
答案 1 :(得分:1)
你需要一种方法来记住你到目前为止遇到的角色。您可以将它们存储在Set中,如下所示:
public static int diff(String str) {
Set<Character> chars = new HashSet<Character>();
for (int i = 0; i < str.length() - 1; i++) {
char ch = str.charAt(i);
if (!chars.contains(ch)) {
chars.add(ch);
}
}
return chars.size();
}
答案 2 :(得分:0)
一种显而易见的方法是在集合中收集看到的字符,但使用排序字符数组可能更有效。
char[] ary = str.toCharArray();
Arrays.sort(ary);
int count = 0, prev = -1;
for (char c : ary) if (c != prev) { count++; prev = c; }
答案 3 :(得分:0)
你的问题是你只是将当前的char与之前的char进行比较,而不是将它们全部进行比较。你可以像这样解决它:
public int diff(String str) {
int count = 0;
// Loop through all the array
for (int i = 0; i < str.length(); i++) {
boolean seen = false
// Loop trying to match all the previous with the current
for(int j = 0; j < str.length(); j++) {
if (str.charAt(i) == str.charAt(i)) {
seen = true
}
}
// Count it if it's not been seen before
if seen == false {
count++
}
}
return count+1;
}
这样做是尝试将当前的char str.charAt(i)
与之前的所有匹配
str.charAt(j)
。如果不清楚,请告诉我。
这不是最有效的方法,但我试图匹配您在代码中所做的事情并解释它的错误。可能短路阵列会更快。