使用数组或字符更有效吗?

时间:2018-12-14 06:14:47

标签: java

这是确定字符串中至少有两个唯一字符的最有效方法吗?我应该使用数组保存字符吗?谢谢

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

3 个答案:

答案 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;
}