码迷,mamicode.com
首页 > 编程语言 > 详细

PHP(5)“最长公共前缀”算法问题

时间:2018-09-08 14:04:18      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:func   包含   维数   二维数组   code   查找   函数   数组   function   

原题目这样的:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""

示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。

//代码如下
class test
{
    public function a6($arr)
        {
        //获取字符串数组中的第一个值,以这个元素的值为基准,数组中之后的元素都跟这个进行比较
            $common_str= $arr[0];
        //遍历一下数组,把每个字符串都切割成数组,切割完就是这样的 array(0=>array(),1=>array()...n=>array()),你可以把得到的结果想成一个矩阵,矩阵的行数就是有多少个字符串,也就是传入数组的下标,列数就是每个字符串被切割后的数组下标。
            foreach ($arr as $key=>$value) 
            {
                $arr[$key] = str_split($value);
            }
        //到这里,$arr已经成为一个二维数组
            $length = count($arr);
            $temp = $arr[0];
        //因为我们要把每个字符串都和传入数组的第一个进行比较,所以把第一个单拿出来,作为一个基值
            $len = count($temp);
        //这个for循环中的$i 为矩阵的列,这样就能取出来每个子字符串数组的第i位
            for ($i=0;$i<$len;$i++) 
            { 
        //这里for循环中的$n为矩阵的行,就是传入字符串数组的下标
                for ($n=1; $n<$length; $n++) 
                { 
        //如果基值的第i位与后面字符串的第i位不相等的话,截取基数字符串到第i位前
                    if($temp[$i]!=$arr[$n][$i])
                    {
        //当然这儿有一个特殊情况,就是比较第0位还没比完时候,就bi掉了,那么就返回无相同前缀
                        if($i == 0) 
                        {
                            return "无相同前缀";
                        }
                        return substr($common_str,0,$i);
                    }
                }
        //此处判断是 加入基数字符串遍历完成,全部都相同,那么我们返回基数字符串
                if ($i==$len-1) 
                {
                    return $commen_str;
                }
            }
        }
}

PHP(5)“最长公共前缀”算法问题

标签:func   包含   维数   二维数组   code   查找   函数   数组   function   

原文地址:https://www.cnblogs.com/qiuergou/p/9608902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!