我必须编写一个代码,用于计算字符串中有多少个唯一字母: e.g
"aabbcdefff"
这将返回6,因为字符串中有6个不同的字母。目前我有代码:
String letters = ("aabbcdefff");
char temp = ' ';
for (int i = 0; i < letters.length(); i++){
temp = inp.charAt(i);
if (temp != ' ') { //doesnt count spaces as letters
alphabetSize = alphabetSize+1;
for (int j = 0; j < inp.length(); j++){
tempInp = tempInp.replace(temp,' ');
}
}
}
这段代码的想法是,它应该在检测到一个字母时,用空格替换它的所有实例。然而,当我运行此代码时,它只是给我字符串的长度。我究竟做错了什么?还有另一种更优雅的方法吗?
感谢您的帮助。
答案 0 :(得分:6)
只需使用Set即可。
循环遍历字符串,并将每个字母添加到您的字符集中。然后,检查你的设置长度和你的完成。
答案 1 :(得分:1)
它是Java 8流API的单线程序:
long numberOfDistinctChars = s.chars().distinct().count()
答案 2 :(得分:1)
您可以使用Linq
服务轻松找到它。
请添加using System.Linq;
命名空间。
string str = "TestTest";
int cnt = str.ToLower().ToCharArray().Where(w => w != ' ').Distinct().Count();
答案 3 :(得分:0)
您可以使用 Java集合(设置)轻松完成。
Set<Character> result = new HashSet<Character>();
String letters = ("aabbcdefff");
for (int i = 0; i < letters.length(); i++){
result.add(letters.charAt(i));
}
您的最终结果是结果集,并且始终是唯一的。
参考:http://docs.oracle.com/javase/7/docs/api/java/util/Set.html
感谢。
答案 4 :(得分:0)
执行此操作的一种方法是将字符串转换为数组,然后使用以下方法:
String s = "aabbcdefff";
char[] charArray = s.toCharArray();
ArrayList<Character> al = new ArrayList<Character>();
for(char c : charArray){
if(al.contains(c)){
al.remove((Character)c);
}else{
al.add(c);
}
}
数组列表'al'中剩下的内容是重复的。这种方法的优点是它具有O(n)运行时