-4

重複の可能性:
指定された文字列で最長の回文を返す関数を作成する

与えられたテキストで最長の回文を見つけるプログラムを書く必要がある C++ の課題があります。たとえば、テキストは次のとおりです: asdqerderdiedasqwertunut、私のプログラムはtunut19 のインデックスで検索する必要があります。ただし、入力がこれに変更された場合、22のインデックスではなく 0 のインデックスでastunutsaderdiedasqwertunut検索する必要があります。astunutsatunut

だから、私の問題はこれです。しかし、私はこのテーマの初心者です。文字列クラス、ループ、ifs だけを知っています。これについて私を助けていただければ幸いです。

前もって感謝します。

4

2 に答える 2

3

アイデアは非常に単純です。

  • 文字列を受け取り、それが回文であるか回文でないかis_palindrome(string)を返す関数を書きなさいtruefalse
  • その関数を使用して、元の文字列から異なる部分文字列を切り取る 2 つのネストされたループを記述します。各部分文字列を に渡しis_palindrome(string)、 を返す文字列の中で最も長いものを選択しますtrue

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

于 2012-04-13T00:09:42.327 に答える
1

Dasblinkenlightのアイデアはかなり良いですが、この方法の方が高速です。

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

于 2012-04-13T00:29:04.240 に答える