主要思路:
分析的时候可以用来两个指针来进行分析解决,首指针指向头部,如果当前位置为数字的话,第二个指针从当前位置下一个位置开始寻找,如果是数字记录下来,如果不是数字,把该位置的下标+1也就是下一个位置作为下一次寻找的起始位置,继续需找,如果长度大于当前最长长度,进行替换,否则继续寻找
获取字符串中最长的数字字符串
输入:
abcd12345ed125ss12345671089
12345671089
<?php
$str = 'abcd12345ed125ss12345671089'; //输出最长的数字串
$arr= str_split($str);
$num = count($arr);
$max = 0;
for ($i=0; $i < $num; $i++) {
$target = array();
//如果当前字符是数字
if ($arr["$i"] >= '0' && $arr["$i"] <= '9') {
$target[] = $arr["$i"];
for($j = $i+1;$j < $num; $j++) {
//从当前字符为数字的下一个字符开始寻找
if ($arr["$j"] >= '0' && $arr["$j"] <= '9') {
$target[] = $arr[$j];
} else {
$i = $j+1;
break;
}
}
$nums = count($target);
if ($nums > $max) {
$max = $nums;
$result = $target;
}
} else {
continue;
}
}
//将数组转化成字符串
$ret = implode($result);
echo $ret;
获取最长的非数字字符串, 思路和上面的一样
输入:
abcd12345ed125sseeeffffdd##!123456789
输出:
sseeeffffdd##!
<?php
$strs = 'abcd12345ed125sseeeffffdd##!123456789'; //输出最长的字符串
$arr= str_split($strs);
$num = count($arr);
$max = 0;
for ($i=0; $i < $num; $i++) {
$target = array();
//如果当前字符是数字
if (!is_numeric($arr["$i"])) {
$target[] = $arr["$i"];
for($j = $i+1;$j < $num; $j++) {
//从当前字符为数字的下一个字符开始寻找
if (!is_numeric($arr["$j"])) {
$target[] = $arr[$j];
} else {
$i = $j+1;
break;
}
}
$nums = count($target);
if ($nums > $max) {
$max = $nums;
$result = $target;
}
} else {
continue;
}
}
//将数组转化成字符串
$ret = implode($result);
echo $ret;