2017-12-29 6 views
1

私はパリンドロームsを持っていて、楽しみのためにsの末尾に文字を続けて追加していきます。しかし、私は一度sが回文ではなくなるのを止めたい。新しい文字をPalindromeに追加します。新しい文字列がまだPalindromeかどうかをチェックする効率的または動的な方法?

今や私は怠惰なので、新しい文字がsに追加されるたびに回文であるかどうかを調べるためにsを再スキャンしたくありません。 sが既にパリンドロームであるという事実を利用して、新しいsが回文であるかどうかを定式化/チェックするより速い方法があるかどうか疑問に思っています。私はその情報を利用する方法があると感じていますが、私はそれについて私の頭を包み込むことはできません。


私は私の思考プロセスに立ち往生しています。これまでのところ私は事を事例に分解しようとしています。

ドロームsは、二つの形態であってもよい。

|__M__|s|__-M__|のサブ部分である|__M__|の逆である)長さが奇数である場合:

|__-M__|X|__M__|

長さは偶数です。

|__-M__||__M__|

私は新しい文字 cを追加する際

は今

|__-M__|X|__M__|c < ----回文をチェックするための効率的な方法はありますか?

|__-M__||__M__|c < ----a palindrome?

+1

この基準を満たす回文(長さが奇数、奇数、またはその両方)の例をいくつか挙げることができますか?私の頭の上から、私は一文字の回文を考えることができ、同じ文字を付けることができます。 aaa - > aaaa – Keeler

+0

@Keeler今あなたは私が問題を考えていたと思っています.....私は回文が回文として残っている唯一の時間は、すべての文字が同じで同じ文字を追加するということです。 (プラス空の文字列の場合).....右か?今、私は愚かな気がします......なぜこのような簡単な質問のために眠りを失うのですか?sigh –

答えて

0

コメントから同じ文字の推測を定式化:

N文字を持つ文字列Sではないすべての文字が同じであれば、そこにする必要があります

  • 文字インデックスP1C1、続いて異なるC2,P1+1
  • a,N-1-P1であり、先にC2である。 N-2-P1

Sに任意の単一文字を追加した後、今そこにある必要があります。

  • 文字C1C2続いインデックスP1、でP1+1
  • C1でミラー指数で、今N-P1であります、先にC2N-1-P1

したがって、N-1-P1の文字は、C1(内線の前)とC2(内線の後)の両方である必要があります。

元の文字列が1つの単一文字の繰り返しである場合に限り、それを文字単位に拡張して回文型にすることは可能ですか?

+0

感謝します。ラルフ、歓声。 – Keeler

関連する問題