###############問題文###
入力には文字列 str と文字 c が与えられています。文字列を非回文に変換するには、指定された文字 c を文字列のインデックスに挿入する必要があります。文字列を回文以外に変換できない場合は、「-1」を出力します。
###例###
###入力###
リーリー
###出力###
リーリー
説明
の翻訳は次のとおりです:
説明
指定された文字列の任意のインデックスに「n」を挿入できるため、複数の出力文字列が存在する可能性があります。したがって、出力文字列は「nnyan」、「nanyan」、「naynan」、「nayann」などになります。
###入力###
リーリー
###出力###
リーリー
説明
の翻訳は次のとおりです:
説明
指定された文字列のどこに「s」を挿入しても、それは常に回文になります。
###入力###
リーリー
###出力###
リーリー
説明
の翻訳は次のとおりです:
説明
str はすでに非回文であるため、最初のインデックスに文字 c を挿入して同じ文字列を出力します。
上記の問題を解決するロジックは、指定された文字列内のすべての文字が指定された文字 c と等しい場合、それを回文にすることはできないということです。それ以外の場合は、最初の位置に文字を追加し、結果の文字列が回文であるかどうかを確認します。その場合は、指定された文字を最後に挿入します。
方法 1
このメソッドでは、while ループを使用して指定された文字列が回文であるかどうかを確認し、for ループを使用して指定された文字列内のすべての文字が同じかどうかを確認します。
###アルゴリズム###
ステップ 1
- 「cnt」変数を初期化して、指定された文字 c に等しい文字数を格納します。
ステップ 2
- for ループを使用して文字列を反復処理します。文字列内のインデックス i の文字が文字 c と等しい場合、「cnt」の値に 1 を加算します。
ステップ 3
- 「cnt」の値が文字列の長さと等しい場合は、「-1」を出力し、return ステートメントを実行します。
ステップ 4
-c str を使用して「temp」変数を初期化します。その後、isPalindrome() 関数を使用して、指定された文字列が回文であるかどうかを確認します。 -
ステップ 5 - isPalindrome() 関数を定義します。 -
ステップ 5.1 - 変数 'left' を定義し、0 に初期化します。また、変数「right」を定義し、文字列から 1 を引いた長さに初期化します。 -
ステップ 5.2 - while ループを使用して、文字列の先頭と末尾の文字を一致させます。さらに、「左」変数の値を増やし、「右」変数の値を減らします。 -
ステップ 5.3 - 不一致が見つかった場合は false を返し、それ以外の場合はすべてのループ反復が完了したときに true を返します。 -
ステップ 6 - 「temp」変数の値が非回文の場合はそれを出力し、それ以外の場合は str c を出力します。 -
Example
の中国語訳は次のとおりです: Example-
リーリー
###出力###
リーリー
時間計算量 - for ループを使用して、指定された文字に等しい文字の総数をカウントするため、O(N)。 -
スペースの複雑さ - 余分なスペースを使用していないため、O(1)。 -
方法 2
このメソッドでは、最初のメソッドと同じロジックを使用しますが、文字列が回文であるかどうかをチェックするために for ループを使用します。さらに、 count() メソッドを使用して、文字列内の指定された文字の合計数をカウントしました。
###アルゴリズム###
ステップ 1
- count() メソッドを使用し、最初のパラメータとして string を渡し、2 番目のパラメータとして指定された文字 c を渡し、文字列内の指定された文字に等しい文字数をカウントします。
ステップ4
*-指定された文字を任意の位置に挿入し、文字列が非回文であるかどうかを確認します。結果の文字列が回文ではない場合は答えが得られますが、そうでない場合は、文字列内の指定された文字の位置を変更して再度確認してください。
以上が指定された文字を挿入して文字列を非回文にしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。