class Solution {
/**
* @param string $str
* @return string
*/
function format($str) {
$len = strlen($str);
$l = 0;
$r = $len -1;
$res_str = '';
//第一步:分类数据,左边放字母,右边放数字
while($l
//使用双指针,遇到需要交换的,进行交换。
//var_dump($l-$r,$l,$r,$str);
//左边是字母,继续,是数字时停下来,准备交换,
if($this->is_alpha($str{$l})){
$l++;
}
//左边是数字,继续,是字母时停下来,准备交换,
if($this->is_int($str{$r})){
$r--;
}
//当左边是数字,右边是字母时,下面进行交换。
if($this->is_int($str{$l}) && $this->is_alpha($str{$r})){
$tmp = $str{$l};
$str{$l} = $str{$r};
$str{$r} = $tmp;
$l++;
$r--;
}
}
//第二步:找到字母和数字的分界点
$l = 0;
$r = 0;
for($i=0;$i
if($this->is_int($str{$i})){
$l = $i-1;
$r = $i;
break;
}
}
//字母和数字的个数差不能大于1,根据题意
if(abs(($len - ($l+1))-($l+1)) > 1){
return '';
}
//第三步:格式化字符串,
//数字多的情况,先取数字
if($len - ($l+1) > $l+1){
//数字多的情况,先取数字
for($i=0,$j=$len-1;$j>=$r;$i++,$j--){
$res_str .= $str{$j};
if($i <= $l){
$res_str .= $str{$i};
}
}
}else{
//字母多的情况,先取字母
for($i=0,$j=$len-1;$i<=$l;$i++,$j--){
$res_str .= $str{$i};
if($j >= $r){
$res_str .= $str{$j};
}
}
}
return $res_str;
}
function is_alpha($a){
if($a >= 'a' && $a <= 'z'){
return 1;
}else{
return 0;
}
}
function is_int($a){
if($a >= '0' && $a <= '9'){
return 1;
}else{
return 0;
}
}
}
$str = '9o5ck83';
//$nums =[2,2,2,3,4,4,5,5];
$obj = new Solution();
$res = $obj->format($str);
var_dump($res);
//3k8o9c5