public class Solution {
    public string LongestCommonPrefix(string[] strs) {
        if (strs.Length == 0)
            {
                return "";
            }
            else if (strs.Length == 1)
            {
                return strs[0];
            }
            else
            {
                var maxLen = 1;

                var len = strs.Length;
                while (true)
                {
                    for (int i = 0; i < len - 1; i++)
                    {
                        var s1 = strs[i];
                        var s2 = strs[i + 1];

                        if (s1.Length < maxLen || s2.Length < maxLen)
                        {
                            return strs[0].Substring(0, maxLen - 1);
                        }

                        if (s1.Substring(0, maxLen) != s2.Substring(0, maxLen))
                        {
                            return strs[0].Substring(0, maxLen - 1);
                        }
                    }
                    maxLen++;
                }
            }
    }
}

https://leetcode.com/problems/longest-common-prefix/#/description

补充一个python的实现:

 1 class Solution:
 2     def longestCommonPrefix(self, strs: 'List[str]') -> str:
 3         n = len(strs)#获取数组长度
 4         if n == 0:#如果是空数组,则返回空串
 5             return ''
 6         if n == 1:#如果数组中只有一个字符串
 7             return strs[0]#则返回这个字符串
 8         j = 0#定义索引j用于遍历每个字符串中的字符
 9         while True:
10             for i in range(1,n):#从index=1开始,比较“当前位置”和“前一个位置”的字符串
11                 if j >= len(strs[i-1]) or j >= len(strs[i]):#如果索引就超过了当前用于对比的任意一个字符串的长度
12                     return strs[i][:j]#则返回当前字符串的前半部分的切片(不包含j的位置的字符)
13                 if strs[i-1][j] != strs[i][j]:#如果用于对比的两个字符串的当前字符不相同
14                     return strs[i][:j]#则返回当前字符串的前半部分的切片(不包含j的位置的字符)
15             j += 1#内存循环没有return,则j自增继续下一次循环
16         return strs[0]#循环都执行完毕,说明所有的字符都是一样的,此时j==len(strs[0])

 

posted on 2017-04-25 13:07  Sempron2800+  阅读(132)  评论(0编辑  收藏  举报