1

文字列が同じ長さの別の文字列と一致し、X個の不一致が許可されているかどうかを確認するための最速/最も明確な方法は何ですか?これを実行できるライブラリはありますか、Apache stringUtilsにはありません(挿入/削除も使用するライブラリは1つだけです)。

したがって、長さの文字列が2つあり、それらが1つの不一致が許可されているかどうかを知りたいとします。挿入と削除は許可されていません。

それで:

ABCD <->ABCD=一致

ABCC <-> ABCD=1つの不一致と一致

ACCC <-> ABCD =一致なし、2つの不一致が多すぎます。

4

4 に答える 4

1
String str1, str2;

文字列の長さが等しいと仮定すると、次のようになります。

int i = 0;

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

if(counter > 1)
  // mismatch
于 2012-12-19T10:30:29.187 に答える
1

文字列を一度に1文字ずつ比較します。カウンターを保持して不一致をカウントします。カウンターが制限を超えた場合はfalseを返します。文字列の終わりに達した場合はtrueを返します。

于 2012-12-19T10:30:59.363 に答える
1

文字列を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
于 2012-12-19T10:34:48.410 に答える
1

最速の方法が必要な場合は、「近似ボイヤー-ムーア文字列照合」や接尾辞木メソッドなどの既存のアルゴリズムからコーディングする必要があります...

ここを見てください:https ://codereview.stackexchange.com/questions/13383/approximate-string-matching-interview-question

彼らは数学をしました、あなたはコードをします...

その他の興味深いSO投稿は次のとおりです。

最も近い文字列の一致を取得する

java.util.regex.Patternは部分一致を実行できますか?

特定の文字列のすべての順列を生成する

類似スコア-レーベンシュタイン

于 2012-12-19T10:39:58.720 に答える