这是确定字符串中至少有两个唯一字符的最有效方法吗?我应该使用数组保存字符吗?谢谢
public static Boolean checkPW(String pw) {
Boolean validLower = false, validUpper = false, validNumber = false;
char lowerCompare = '0', upperCompare = '0', numberCompare = 'a';
for(int position = 0; position < pw.length(); ++position) {
char character = pw.charAt(position);
if(character >= 'a' && character <= 'z') {
if(lowerCompare == '0')
lowerCompare = character;
else if(lowerCompare != character)
validLower = true;
} // lower-case if END
} // for-loop END
if(validLower)
return true;
else
return false;
} // checkPW END
答案 0 :(得分:1)
如果必须在Java中执行此操作,则在生产中,我可能只在这里使用一个集:
String input = "abcdefgzz";
char[] letters = input.toCharArray();
Set<Character> set = new HashSet<>();
boolean valid = false;
for (char letter : letters) {
set.add(letter);
if (set.size() > 1) {
valid = true;
break;
}
}
if (valid) {
System.out.println("Minimum of two unique letters");
}
else {
System.out.println("Only one unique letter");
}
答案 1 :(得分:1)
这是确定字符串中至少有两个唯一字符的最有效方法吗?
不。找到2个唯一的有效字符后,循环将继续运行,这是不必要的。它可以立即停止,然后会更有效率。考虑例如字符串"ab"
后跟一百万个字符。除了前两个之外,没有必要进一步介绍。
我应该使用数组来保存字符吗?
问题尚不清楚。为了使其有意义,您需要对两种方法的优点都进行推理。还不清楚您指的是什么技术。
最好从程序中删除所有不必要的变量。 解决效率低下的问题,并进行一些清理:
public static boolean checkPW(String pw) {
char first = '0';
for (int position = 0; position < pw.length(); ++position) {
char character = pw.charAt(position);
if ('a' <= character && character <= 'z') {
if (first == '0') {
first = character;
} else if (first != character)
return true;
}
}
}
return false;
}
答案 2 :(得分:0)
我会这样做:
public static boolean checkPW(String pw) {
Character lowerCompare = null;
for (int position = 0; position < pw.length(); ++position) {
char character = pw.charAt(position);
if(Character.isLowerCase(c)) { // this handles non-ASCII lower case characters
if(lowerCompare == null) {
lowerCompare = character;
} else if(lowerCompare != character) {
return true;
}
}
}
return false;
}