我在弄清楚如何检查用户输入的重复字母时遇到问题。程序需要将重复的字母输出为 true,如果没有则输出为 false。程序不应计算重复的数字或符号。
例如:
用户输入:巧克力
程序输出:真
用户输入:112奶油
程序输出:假
这是另一个版本,基于 @rell 的回答,但没有HashSet
or char[]
创建。
private static boolean check(String input) {
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (Character.isLetter(ch) && input.indexOf(ch, i + 1) != -1) {
return true;
}
}
return false;
}
对于较小的输入字符串,这很可能会更快。但对于较长的输入字符串,@rell 的版本可能更快,因为他使用的是HashSet
with O(1)
查找/插入,并且由于循环是O(n)
总计是O(n)
。我的解决方案是O(n^2)
(loop O(n)
乘以indexOf
with O(n)
),最坏情况的输入会是这样的abcdefghijklmnopqrstuvwxyzz
.
Update另一个带有流的版本。
private static boolean check(String input) {
IntStream characters = input.codePoints().filter(Character::isLetter);
return characters
.distinct()
.count() == characters.count();
}
Update修复了流版本中的错误
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)