我们只为 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。我猜我需要考虑递归解决方案获取字符串和索引等的最后一个字符。但我正在考虑这些,因为我写这篇,太迟了!
你们在想什么?
答案 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
我知道,我知道,这是因为要求的字母而不是它们的精神所致。