题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
过程分析
既然找的是相同的前缀,找到数组最小长度的字符串依次比较即可
1.获取数组最小和最大长度的字符串
2.比较最大和最小长度字符串的相同字符
3.遍历整个数组比较前缀如果不同则缩减前缀的长度直到找到相同项
public static string LongestCommonPrefix(string[] strs)
{
if (strs.Length == 0) return string.Empty;
strs = (from str in strs orderby str.Length select str).ToArray();
string prefix = string.Empty;
int prefixLen = 0;
int len = strs[0].Length;
var min = strs[0].ToCharArray();
var max = strs[strs.Length - 1].ToCharArray();
for (int i = 0; i <= len - 1; i++)
{
if (min[i] == max[i]) prefix += min[i].ToString();
}
if (string.IsNullOrEmpty(prefix))
return prefix;
prefixLen = prefix.Length;
foreach (var s in strs)
{
string sub = s.Substring(0, prefixLen);
if (!sub.Equals(prefix))
{
var subs = sub.ToCharArray();
var prefixs = prefix.ToCharArray();
var m = string.Empty;
for (int i = 0; i <= sub.Length - 1; i++)
{
if (subs[i] == prefixs[i]) m += subs[i].ToString();
}
if (string.IsNullOrEmpty(m)) return m;
prefix = m;
prefixLen = prefix.Length;
}
}
return prefix;
}