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])