2012-02-17 20 views
4

文字列に1つの不一致があります。
1文字で文字列の不一致があります

1)CHARACTER INTERCHANGE W/O DISTURBING PATTERN 
ACRPG0182F v/s ACRPG0812F 
ACNPA4428K v/s ACHPA4428K 

2)CHARACTER LENGTH DIFFERS BY 1 DIGIT 
ACRPG0182F v/s ACRPG0812 
ACRPG0182F v/s CRPG0812F 

ケース1では両方の文字列の長さが同じであるが、それは両方の文字列の長さケース2に1つの文字の不一致
を有する1によって異なり、任意の1つの文字は、両方の文字列にミスマッチすることができます。

+0

これらの文字列の予想長さに関する情報はありますか? – hovanessyan

+0

の場合は、両方の文字列の長さが同じでケース2の場合は1文字で文字列が異なります – Abhij

+0

私は、30000文字列で十分に速く動作するアルゴリズムを望んでいない場合は、すべての弦すべて)。 – hovanessyan

答えて

4
  • 正規表現を使用して番号を取得する(\d+
  • は、すべての文字(numberStr.toCharArray()
  • 使用guavaSetsSet埋める - それは

もともとは正確に一つの要素を持っている場合Sets.difference(set1, set2)をしてご覧くださいI異なる方法で差異を確認する必要があると考えました。「文字列には順序に関係なく1つの異なる数字しか含まれていません」ではなく、1つの数字だけが異なるかどうか。注文も重要な場合は、levenshtein distanceを計算して1に等しいかどうかを確認してください。

StringUtils.getLevenshteinDistance(s1, s2)commons-langとなります。

+0

この[link](http://www.merriampark.com/ld.htm)の質問の例を適用すると、距離は2になります。それが必要性に十分であるかどうかは分かりません。 – foch

+0

あなたはさらに3を得ます。それで、彼の例をもっと見ると、Sets.differenceソリューション – Bozho

0

文字列にXor関数を定義します。

0

Levenshtein distance1のように聞こえる場合は、リンクのアルゴリズムをご覧ください。

+0

を追加しました。これは動作しません。私は彼の例をもっと見ると、彼は別の論理 – Bozho

2

Bozhoに記載されているように、levenstein distanceを使用すると、おそらく問題を解決するための最も直接的なルートです。そのページの定義は、あなたが求めているものと正確に同じように見えます。

レーベンシュタイン距離(LD)は、我々はソース文字列(S)と ターゲット文字列(T)と呼ぶれる2つの 文字列間の類似性の尺度です。距離は、削除の数、 の挿入、またはsをtに変換するために必要な置換です。

+0

を必要としますが、これはうまくいかないでしょう。彼は別の論理を必要とする – Bozho

+1

私は彼の質問を読んでいるところから、はいといいえ。それは、問題の2つのアイテムが効果的に文字を交換しているところで、1または2の距離のリベンシュタイン距離が必要なようです。入力に応じて、levensteinアルゴリズムを使用して入力を1〜2の距離にフィルタリングしてから、追加の制約をチェックするために2を分析することは合理的な方法のようです。 – RHSeeger

関連する問題