2017-04-13 11 views
0

のすべての順列を一致させるための正規表現が必要です。例えばは私がターゲット文字列で与えられた単語の異なる大文字小文字を区別しない順列を一致させる必要がある問題を解決しています与えられた単語

:一致する

ワード:CADA

ターゲット文字列:ここアブラカダブラ

、ターゲット文字列Sに見出すことができる2個の可能な順列がアカデミーとするcadAあります。

私はこのような何かを書かれている:それは動作しません

String pattern = "" ; 

    for(char ch : word.toCharArray()){ 
     pattern = pattern + "(?=[\\s\\S]*(" + ch + "))" ; 
    } 
    pattern = "^" + pattern + "*$"; 

    Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); 

+5

正規表現は、このタスクでは非常に貧弱です。すべての順列が必要な場合、正規表現にはすべての順列が含まれていて、1つの単語ではありません。 – dasblinkenlight

+0

[このデモ](http://ideone.com/Txkyrf)を参照してください。 –

+0

はあなたには、いくつかのコードをどのように私を見ることができ、私はまだWiktorStribiż[email protected]正規表現 –

答えて

0

正規表現は、このタスクのための最高のツールではありません。すべての入力単語に対して新しい正規表現を生成する必要があります。不可能ではありませんが、過度に複雑です。あなたは、ターゲット単語の文字を並べ替えたほうが良いと思います

、その後、入力ワードの各nの長さの部分文字列のために、文字を並べ替えると、彼らは、ソート対象の単語と一致するかどうかを確認します。

ので、ターゲットワード「CADA」を考えると、あなたは「AACD」を与えるためにそれを並べ替えます。

ユーザ入力「アブラカダブラ」

だから、ソート、それは「AABR」を取得し、ソートされたターゲットに対してそれをチェックするために、最初の4文字の部分文字列を、「アブラ」取ります。勝ち目がない。それから、 "brAc"を取り、ソートしてチェックしてください。そして、「アカデミー」などが

ソートを避けるために、いくつかの潜在的な最適化がありますが、小さな文字列で、彼らはおそらくあまり重要ではありません。

関連する問題