2012-04-17 7 views
3

これは一例で最もよく説明されています。段落を考える:周波数の順序で最も長い部分文字列を見つけるにはどうすればよいですか?

The longest string in this paragraph is not the shortest string in the paragraph because it is the longest string in the paragraph

私は、この場合には、それは(非大文字と小文字を区別)

    を一覧表示する必要がありますので、周波数によって最初のサブ文字列をマッチングして、長さの順番を一覧表示したいです
  • The longest string in
  • the paragraph
  • is not the shortest string in
  • because
  • it is
  • this

上記リストサブストリングの長さに続くそれらが起こる頻度順によって、そうThe longest string inを二回繰り返し、最長ストリングです。 is not the shortest string inthe paragraphよりも長くなりますが、the paragraphが2回繰り返されるため、最初にリストされます。 (AlexCとMattBurlandによる観察に基づく)

更新:このような空白文字またはinなどのサブストリングが他のストリングよりも多く発生した場合でも、それらが既に含まれている場合

、それらがリストされるべきではありませんその出現*長さよりも長い部分文字列。たとえば、inは3回発生し、長さは6文字(最後にスペースを含む9文字)ですが、9文字はthe paragraphよりも短いため、リストには含まれません。私はこれが意味をなさないと思いますか?

+1

http://ja.wikipedia.org/wiki/Longest_common_subsequence_problem –

+0

@MattBurland - ああ、素敵なキャッチ、あなたは良い点があります。私はその質問を言い換えるべきだと思います。 'in' x 3が別の部分文字列x nより大きい場合、' in'が最初にリストされるべきです。それは理にかなっていますか?しかし、inが* occurencesよりも長い部分文字列にすでに含まれている場合、それはリストされてはなりません。 – Xaisoft

+3

部分文字列が 'i'に続いて最も一般的になるため、部分文字列を探しているとは思いません。それはあなたが単語の完全な単語/組み合わせを探しているように聞こえる。 – AlexC

答えて

0

うん、他の人があなたが提供される例からサブストリングを抽出し、空白をトリムする場合は、このような文字列の配列を取得し、前記のように:

列[] MyArrayという= { " "、"最長 "、など....

今、あなたができることは、それらのオカレンスを増加させながら類似している文字列を削除する配列にループです。次に、この情報をリストに追加します。

次にループを繰り返し、長さの順序を指定します。しかし、最後には、入力文字列が最初に$記号のようなスペース以外のもので区切られている場合を除いて、リストに含まれる文字列は単語の組み合わせにすることはできません。

そのような場合、あなただけ正確に同じことを行う

「それは$段落の中で最も長い文字列$であるため、この段落$は$段落$で最短の文字列ではありません$最長の文字列」上記の手順と同じですが、部分文字列をスペースではなく$記号で区切ります。

関連する問題