字符串操作,回复回文

时间:2012-11-13 16:33:24

标签: php lamp

我们只为 PHP 分类。

好的,所以我昨天接受了高级软件开发人员角色的采访。我不记得这个问题,但是我尽可能多地写下这个问题。

问题;

编写一个以字符串作为输入的函数,如果遍历则返回true,否则返回false。

的要求; (尽我所记)      - 只有一个输入(字符串)类型      - 字符串参数必须通过引用传递      - 函数中没有变量,他的意思是如果调用param $ str 就应该对它进行操作,不喜欢我使用第二个变量来设置 reverseStr 等。
     - 没有循环字符串中的每个字符,他特别说不要循环遍历字符串中的每个字符      - 没有内置的PHP函数可以使用,我认为他很好(strlen)

我的回答; (不,他不喜欢)

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

所以虽然这有点工作,但他不喜欢我通过每个角色来获得reverseStr。我猜我需要考虑递归解决方案获取字符串和索引等的最后一个字符。但我正在考虑这些,因为我写这篇,太迟了!

你们在想什么?

3 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

我认为这很有效。未经测试。虽然它确实有内部变量。

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

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

        return TRUE;
    }

答案 2 :(得分: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

我知道,我知道,这是因为要求的字母而不是它们的精神所致。