4

これをPHPのみに分類してみましょう。

さて、昨日、シニアソフトウェア開発者の役割についてインタビューを受けました。質問はよく覚えていませんが、覚えている限り書き込もうとしています。

質問;

文字列を入力として受け取り、トラバースされた場合はtrueを返し、トラバースされなかった場合はfalseを返す関数を記述します。

要件; (私が覚えている限り)-1つの入力(文字列)型のみ。
-文字列パラメータは参照で渡す必要があります。
-関数内に変数がないということは、paramが呼び出された場合に$ str操作を実行する必要があることを意味し、 reverseStrなどを設定するために2番目の変数を使用するのは好きでは
ありませんでした。-文字列内のすべての文字をループしない、具体的には文字列内のすべての文字をループしないように言った。
-組み込みのPHP関数は使用できません。彼は(strlen)で大丈夫だったと思います。

私の答え; (いいえ、彼はそれが好きではありませんでした)

$str = 'this is testing';
$length = strlen($str);
$reverseStr = '';
for($i=$length-1; $i>=0; $i--) {
 $reverseStr .= $str[$i];
}

したがって、これはある程度の仕事をしますが、彼は私がすべてのキャラクターを通り抜けてreverseStrを取得することを望んでいませんでした。文字列やインデックスなどの最後の文字を取得する再帰的な解決策について考える必要があると思います。しかし、私はこれを書いているときにこれらについて考えています、遅すぎます!

何を考えてるの?

4

3 に答える 3

4

質問はまったく明確ではありませんが、文字列が回文であるかどうかを確認したい場合は、次のようにします。

function is_palindrome ($str){
    if(strlen($str)==0){return true;}
    if($str[0]==$str[strlen($str)-1]){
        return true and is_palindrome(substr($str, 1, strlen($str)-2));
    }else{
        return false;
    }
}
于 2012-11-13T16:49:07.403 に答える
0

これでうまくいくと思います。テストされていません。内部変数はありますが。

    function is_palindrome( &$str )
    {
        $i = $j = 0;
        while( isset( $str[++$j] ) ) {};

        while( $i < --$j )
        {
            if( $str[$i++] !== $str[$j] )
                return FALSE;
        }

        return TRUE;
    }
于 2012-11-13T17:10:11.380 に答える
0

それで彼は「すべてのキャラクターをループすることはない」と言いましたが、彼はそれらの半分をループすることについて何も言いませんでしたか?[悪魔のような笑い]

function is_palindrome(&$str) {
    for($i = 0; $i < strlen($str) / 2; $i++) {
        if ($str[$i] != $str[strlen($str)-1-$i]) return false;
    }
    return true;
}

彼は、操作するための関数内に変数はないと言いまし$strたが、確かにイテレータは問題ありませんか?(まあ、「ループなし」のルールを除いて...)

is_palindrome('abcdcba'); // odd length, returns true
is_palindrome('abcddcba'); // even length, returns true
is_palindrome('abc'); // not a palindrome, returns false

私は知っています、私は知っています、それは要件の精神ではなく、要件の文字によって圧迫されています。

于 2012-11-13T17:10:20.330 に答える