首页 > 其他 > 详细

LeetCode 14 Longest Common Prefix(最长公共前缀)

时间:2015-10-16 23:22:44      阅读:789      评论:0      收藏:0      [点我收藏+]

翻译

写一个函数(或方法)来寻找一个字符串数组中的最长公共前缀。

原文

Write a function to find the longest common prefix string amongst an array of strings.

释义

"abcdefg"
"abcdefghijk"
"abcdfghijk"
"abcef"

上面的字符串数组的最长公共前缀就是"abc"

思考

如下图所示,第一步就是要找出该字符串数组中的最短字符串的长度及其序列。

第二步,用for循环从第一个字符串到最后一个字符串依次做比较,具体步骤如下:

  • 外层for循环中用i表示字符串长度,从minSize一直可以递减到0

  • 初始result即为最短字符串(通过minIndex确定)的前i个字符

  • 内层for循环中用j表示字符串数组中的索引,依次递增。j等于minIndex时不做操作(因为为同一个字符串不必比较)

  • 否则通过临时字符串temp来获取索引为j的字符的前i个字符

  • 需要所有的temp都与result相等

  • 如果jlen相等了,说明已经遍历完所有的字符串

  • 每次判断的字符串长度缩减之后都更新result

技术分享

代码

public class Solution {
    public string LongestCommonPrefix(string[] strs) {
        int len = strs.Length;

        if(len == 0)
            return "";

        string result = "";
        int minSize = 100000;
        int minIndex = 0;

        if(len == 1){
            result = strs[0];
            return result;
        }

        for(int i = 0; i < len; i++){
            int size = strs[i].Length;
            if(size < minSize){
                minSize = size;
                minIndex = i;
            }
        }

        for(int i = minSize; i >= 0; i--){
            result = strs[minIndex].Substring(0,i);

            int j = 0;
            for(; j < len; j++){
                if(j == minIndex)
                    continue;
                string temp = strs[j].Substring(0,i);
                if(result != temp)
                    break;
            }
            if(j == len)
                return result;
        }
        return result;      
    }
}

版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

LeetCode 14 Longest Common Prefix(最长公共前缀)

原文:http://blog.csdn.net/nomasp/article/details/49184355

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!