14.最長公共字首

就是我發表於2018-09-22

題目描述

編寫一個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 ""。

示例 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;
}
複製程式碼

相關文章