2012-04-13 5 views
-4

可能性の重複を見つける方法:
Write a function that returns the longest palindrome in a given string最長の回文に

私は私が与えられたテキストで最長の回文を見つけプログラムを書きたいC++の割り当てを持っています。たとえば、テキストはこれです:asdqerderdiedasqwertunut、私のプログラムは、19の指標でtunutを見つける必要があります入力がこのastunutsaderdiedasqwertunutに変更されている場合しかし、それは22

のインデックスで0の代わりに、tunutの指標でastunutsaを見つける必要がありますだから、私の問題はこれです。しかし、私は主題の初心者です、私はちょうど文字列クラス、ループ、ifsを知っています。もしあなたが私にこれを手伝ってもらえるといいですね。

ありがとうございます。

+4

どこから始めるべきか分からない場合は、誰かにあなたに割り当てを依頼してください。 –

+0

実際に私はアルゴリズムを形成する段階で問題を抱えています。残念ながら、これまでのアルゴリズムはありません。 – rigormort

+3

@Mervechakır与えられた文字列が回文かどうかを判断するアルゴリズムから始めます。 – twain249

答えて

3

アイデアは非常に簡単です:文字列を取る関数is_palindrome(string)を書く

  • 、そしてそれが手にその機能により
  • ない場合は、2を書き回文とfalseある場合trueを返します。元の文字列から異なる部分文字列を切り取ったネストループ。各部分文字列をis_palindrome(string)に渡し、trueを返す文字列のうち最も長い文字列を選択します。

プログラムをさらに最適化するには、短い文字列の前にある最も長い部分文字列を調べます。部分文字列を最長から最短まで調べると、最初の回文が見つかるとすぐに返すことができます。

+1

これは動作しますが、非常に非効率的です。 @grcにリンクされている質問には 'O(n)'アルゴリズムがあります。 – twain249

+0

ありがとう、実際には私が探していたものでした。 – rigormort

+0

@ twain249「宿題」タグが付いている質問は、通常、遅く、非効率的で、わかりやすいアルゴリズムについて質問しています。 – dasblinkenlight

1

Dasblinkenlightのアイデアはかなり良いですが、それはより速く、この方法です:

次の2つの状況を持っているので回文は、文字や奇数、偶数のどちらかを持っています。偶数から始めましょう。 2つの連続した同じ文字を見つけて、直前の文字が次の文字と同じかどうかを確認する必要があります。他の状況でも同じですが、最初は1文字しか必要ありません。私はよく英語を話さないので、あなたが理解してくれることを願っています。 :)

関連する問題