【问题标题】:Java match string with x allowed mismatches.带有 x 允许不匹配的 Java 匹配字符串。
【发布时间】:2012-12-19 10:26:35
【问题描述】:

查看一个字符串是否与另一个相同长度的字符串匹配且允许 X 次不匹配的最快/最清晰的方法是什么?有没有一个库可以做到这一点,它不在 Apache stringUtils 中(只有一个也使用插入/删除)。

所以假设我有 2 个长度的字符串,我想知道它们是否与允许的 1 个不匹配匹配。不允许插入和删除。

所以:

ABCD ABCD = 匹配

ABCC ABCD = 匹配 1 个不匹配

ACCC ABCD = 不匹配,2 个不匹配太多了。

【问题讨论】:

标签: java string mismatch


【解决方案1】:
String str1, str2;

假设字符串的长度相等:

int i = 0;

for(char c : str1.toCharArray())
{
   if(c != str2.charAt(i++))
      counter++;
}

if(counter > 1)
  // mismatch

【讨论】:

  • 您甚至可以if (++counter > 1) break; 在发现不匹配大于 1 时避免继续。
【解决方案2】:

一次比较字符串一个字符。保留一个计数器来计算不匹配。当计数器超过限制时,返回false。如果到达字符串末尾,返回true

【讨论】:

    【解决方案3】:

    尝试将字符串存储在 char 数组中 (char[] charArray = String.toCharArray())。

    char[] stringA = firsString.toCharArray();
    char[] stringB = secondString.toCharArray();
    int ctr = 0;   
    
    if(stringA.length == stringB.length){
        for(int i = 0; i<stringA.length; i++){
            if(stringA[i] == stringB[i]){
               ctr++;
            } 
        }
    }
    
    //do the if-else here using the ctr
    

    【讨论】:

      【解决方案4】:

      如果你想要最快的方法,你应该从现有的算法中编码它,比如“近似 Boyer-Moore 字符串匹配”或后缀树方法......

      看这里:https://codereview.stackexchange.com/questions/13383/approximate-string-matching-interview-question

      他们做数学,你做代码......

      其他有趣的 SO 帖子是:

      Getting the closest string match

      Can java.util.regex.Pattern do partial matches?

      Generating all permutations of a given string

      Similarity Score - Levenshtein

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多