首页 > 解决方案 > 比较字符串的字符是否存在于字符数组中

问题描述

我希望用户输入一个字符串,然后我想检查这个字符串中的每个字符是否存在于我创建的字符数组中。即使它的顺序不正确。

我的方法是初始化字符数组,然后通过使用扫描仪从用户那里得到一个字符串输入。

public static char[]aa={'A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y','U','O','B','J','Z','X'};

我创建了一个函数

private static void isValidSequence(String sequence, char[] k) {
    outter :for (int j = 0; j < sequence.length(); j++) {
        for (int i = 0; i < k.length; i++) {
            if(sequence.charAt(j) == k[i]){
                break;
            } else {     
                System.out.println("invalid"); 
                break outter;
            }
       }     
    }
}

发生的情况是,例如,如果字符串的第一个字母与数组的第一个输入不匹配,它会给我一个“无效”输入。我怎么能绕过呢?并使其在给出无效输出之前遍历整个字符数组。

标签: java

解决方案


一种方法是sort您的数组,然后使用二进制搜索算法(BSA)

// sort the array once
Arrays.sort(aa);

// iterate over the input string
for(int i = 0, length = sequence.length(); i < length; i++) {
    // the java implementation of the BSA returns negative numbers for not found elements
    if(Arrays.binarySearch(aa, sequence.charAt(i)) < 0) {
        // char was not found, break loop
        return;
    }
} 

注意:如果数组未排序/无法排序,则 BSA 无用,会产生未定义的结果。

注 2:BSAO(log n)比简单迭代 ( ) 更快 ( O(n))


推荐阅读