有这样一道笔试题,这种题第一次遇见在纸面上没有任何调试输出的环境对我来说手写出来基本不可能,除非之前在机上写过记得大体过程,就像常见的一些算法,大家都在网上看过很多遍所以印象比较深刻,手写的话应该也可以写出来。
这个题我是第一次遇到,所以手写对我来说基本不可能,因为我遇到问题必须在机子上反复调试才可能得到最终答案,既然遇到了回来还是在电脑上试着写了一下,如有不足或者更简单的方法,欢迎指正。这个题的目的就是写一个函数找出字符串中对称的部分,然后获取符合条件中最长的那个字符串,比如字符串‘ssabcddcba’,那么符合条件的就是‘abcddcba’,下面直接上代码。
$str='aa6aaslolsbcdeggedcbaiokabccbanh';
function getMaxStr($str){
$s_data=str_split($str);
$row=[];
foreach($s_data as $key=>$vol){
foreach($s_data as $k=>$v){
if($k<$key) continue;
if($vol==$v && $key!=$k){
if(($key+$k)==1){
$row[]=substr($str,$key,2);
}else{
$px=$key==0?$k+1:$k-$key;
$px=($px%2)==0?$px:($k-$key+1);
$px=$px/2;
for($s=1;$s<$px;$s++){
if($s_data[$key+$s]!=$s_data[$k-$s]) continue 2;
}
$row[]=substr($str,$key,($k-$key+1));
}
}
}
}
return $row;
}
$r=getMaxStr($str);
print_r($r);
打印结果