私は辛抱強く長いクラス、ID、変数、関数名、および繰り返し使用される他の結合文字列を持つHTML/CSS/JavaScriptをいくつか持っています。私はたぶん名前を変更したり、いくつかを再構成したり、テキストを半分にすることができました。最も長い繰り返し文字列を検索しますか?
だから私は、テキスト中の最も長い繰り返し文字列を報告する単純なアルゴリズムを探しています。理想的には、インスタンスの長さをインスタンスごとに逆順に並べ替えることで、グローバルに名前を変更すると最も節約できる文字列を強調表示します。
これは、私が100行のコードで苦労してできることのように感じます。そのためには、エレガントな10行の再帰正規表現があります。宿題のように聞こえるかもしれませんが、そうではないと私は確信しています。
私はPHPで働いていますが、どの言語で何かを見て楽しんでいます。
注:私はHTML/CSS/JavaScriptの縮小そのものを探しているわけではありません。私は意味のあるテキストが好きなので、私は手でそれをやりたいし、肥大化に対して可読性を測る。そのpreg_match_all
で
(?=((.+)(?:.*?\2)+))
を使用し、最長いずれかを選択します。
:
が出力に含まのようなものでしょうか? – Gumbo
ブルートフォースの方法は、位置0で開始し、0-1が繰り返し文字列であるかどうかをテストすることです。はいの場合は、何回繰り返されたかで配列にパターンを入力します。次に、0-2、0-3などを試してください。パターンが繰り返されていない場合は、開始位置を移動し、1-2を実行します。これを行う間、または何も追加しないものを捨てた後(たとえば、ifホットドッグとホットの両方が10回繰り返されると、ホットドッグだけが維持されます)。ブリーチ。 – LibraryThingTim
例:青い象は太陽の下でホットドッグを食べました。ペンギンは青い象と一緒に太陽の下で横たわって楽しんだ。 青い象x 2 太陽で2 お楽しみくださいx 2 – LibraryThingTim