題目描述
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 ""。
示例 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;
}
複製程式碼