我无法确定如何检查用户输入的重复字母。程序需要将重复的字母输出为true,如果没有则输出为false。程序不应将数字或符号统计为重复。
例如:
用户输入:巧克力
程序输出:True
用户输入:112奶油
程序输出:错误
答案 0 :(得分:3)
以下是另一个版本,基于@rell的回答,但未创建HashSet
或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
查找/插入的O(1)
,并且因为循环是O(n)
,所以总数为{{1 }}。我的解决方案是O(n)
(循环O(n^2)
乘以O(n)
乘以indexOf
),最差情况输入将类似于O(n)
。
更新另一个包含流的版本。
abcdefghijklmnopqrstuvwxyzz
更新修正了流版本中的错误
答案 1 :(得分:2)
private static boolean check(String input) {
Set<Character> tmp = new HashSet<Character>();
for(char ch : input.toCharArray()) {
if (Character.isLetter(ch) && !tmp.add(ch)) {
return true;
}
}
return false;
}
答案 2 :(得分:0)
试试这个:
String username ;
char[] x = username.toCharArray();
boolean duplicates=false;
for (j=0;j<x.length;j++)
for (k=j+1;k<x.length;k++)
if (x[k] == x[j])
duplicates=true
答案 3 :(得分:0)
我们可以用这个减少到单循环。
boolean checkDuplicates(char[] x)
{
Set<char> xSet = new HashSet<char>();
for (char c : x)
{
if (xSet.contains(c)) return true;
xSet.add(i);
}
return false;
}
答案 4 :(得分:0)
1。)对字符数组进行排序。
2。)遍历数组以查看第i个值==(i + 1)的值。如果找到,返回false。否则,返回true。
时间复杂度:O(nlogn)(用于排序)
空间复杂度:O(1)