4

让我们仅对PHP进行分类。

好的,所以我昨天接受了高级软件开发人员职位的面试。我不太记得这个问题,但我尽量把它写下来。

问题;

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

要求; (据我所知) - 只有一种输入(字符串)类型。
- 字符串参数必须通过引用传递。
- 函数中没有变量,他的意思是如果参数被称为$str操作应该在那个上完成,不喜欢我使用第二个变量来设置reverseStr
- 没有循环字符串中的每个字符,他特别说不要遍历字符串中的每个字符。
- 没有内置的 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 回答