【PHP】从2个字符串找到相同的部分,展示最长的字符串

思路: 最容易想到的方法,是把第一个字符串按顺序截取,与第二个字符串对比,存在则写入数组,最后再从数组找到重复之中最长的那个输出
字符串1:/a/b/c/?.oietr?e/f/g/zwty.cn
字符串2:/a/b/c/awp.neeg/e/f/g/zxtn.cc


$str1 = '/a/b/c/?.oietr?e/f/g/zwty.cn';
$str2 = '/a/b/c/awp.neeg/e/f/g/zxtn.cc';

$start=0;$end=2;
for($i=1;$i<strlen($str1);$i++){
    $strpart = substr($str1,$start,$end);
    if(strpos($str2,$strpart)==true){
        $array[]=$strpart;
        $end++;
    }else{        
        $start=$i-1;
        $end=2;
    }
}

$result='';
$c = count($array);
for($j=0;$j<$c-1;$j++){
    if(substr($array[$j+1],0,-1)!=$array[$j]){        
        $result .=$array[$j].'<br>';
        $str_end=$array[$j];
    }
}
if($array[$c-1]!=$str_end){
$result .=$array[$c-1];
}
echo $result;

运行之后:
a/b/c/
e/f/g/z
.c

======= 12 / 26  更新 =======

上面的代码好像有问题,重写一遍

function longest($str1 ='' , $str2 =''){ 
    $start=0;
    $end=2;
    $len = strlen( $str1 );
    // 找到两个字符串完全相同的部分,写入数组 $array
    for ($i=0; $i < $len; ) {
        $strPart = substr($str1, $start, $end);
        if(strpos( $str2, $strPart) == true){
            $array [] = $strPart;
            $end++;
        }else{
            $i++;
            $start = $i - 1;
            $end = 2;
        }
    }
    // 找到 $array 中最长的字符串
    $longest = '';
    foreach ($array as $val) {
        if( strlen($val) > strlen($longest)){
            $longest = $val;
        } 
    }
    return $longest;
}

$str1 = "/a/b/c/?.oietr?e/f/g/zwty.cn";
$str2 = "/a/b/c/awp.neeg/e/f/g/zxtn.cc";

echo longest($str1,  $str2);

输出: e/f/g/z


方法二:

一次循环搞定

function longest($str1 ='' , $str2 =''){  
    $start=0; $end=2; $longest = ''; $len = strlen( $str1 ); 
    // 找到两个字符串完全相同的部分,赋值给 $longest ,当找到有最长的字符串,就替换 $longest
    for ($i=0; $i < $len; ) {
        $part = substr($str1, $start, $end); 
        if(strpos( $str2, $part) == true){
            if( strlen($part) > strlen($longest)){
                $longest = $part;
            } 
            $end++; 
        }else{
            $i++;
            $start = $i - 1;
            $end = 2;
        }
    }
    return $longest; 
} 
 
$str1 = "/a/b/c/?.oietr?e/f/g/zwty.cn";
$str2 = "/a/b/c/awp.neeg/e/f/g/zxtn.cc"; 
echo longest($str1,  $str2);

输出 : e/f/g/z

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值