【发布时间】:2017-01-05 17:18:31
【问题描述】:
对于我的学校项目,我需要编写一个算法来检查数组的两半是否都是回文,如果数组有奇数,我应该跳过中间的一个。例如:
[1,2,1,6,4,2,5] 应该检查 [1,2,1] 是否是回文,如果 [4,2,5] 是回文,跳过中间值会导致其奇数.
这是我到目前为止写的:
$somearray = ['1','1','1','1','1','2','1','1','2','1','1'];
$array_size = count($tablica);
function check_palindrome($arr, $start, $end)
{
for($i=$start; $i < $end; $i++){
if($arr[$i] != $arr[$start+$end-$i])
{
return false;
}
}
return true;
}
if($array_size%2 == 0){
$start1 = 0;
$start2 = $array_size/2;
$end1 = $array_size/2 - 1;
$end2 = $array_size - 1;
} else {
$start1 = 0;
$start2 = round($array_size/2);
$end1 = round($array_size/2, 0, PHP_ROUND_HALF_DOWN)-1;
$end2 = $array_size -1;
}
$foo1 = check_palindrome($somearray, $start1, $end1);
$foo2 = check_palindrome($somearray, $start2, $end2);
if($foo1 && $foo2){
echo 'Halfs are palindromes';
} else {
echo 'Halfs are not palindromes';
}
它有效,但首先最重要的部分 - 我的算法检查前半部分是否是回文,然后调用函数两次我检查后半部分 - 我的老师不喜欢这样并告诉我应该将它写在一个函数中,但是我真的不知道怎么做。
我的第二个问题是如何改进我的 for 循环,因为现在它检查一半是这样的:
A=[1,2,4,2,1]
1=1, 2=2, 2=2, 1=1 如果为真,但应在检查 1=1 和 2=2 后停止
这是因为 for 循环中的这条语句:$i
我真的需要你的帮助。谢谢。
【问题讨论】: