C# 寫 LeetCode easy #14 Longest Common Prefix

皮皮丶碼發表於2018-11-29

14、Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string "".

Example 1:

Input: ["flower","flow","flight"]
Output: "fl"

Example 2:

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

Note:

All given inputs are in lowercase letters a-z.

 

程式碼:

static void Main(string[] args)
{
    string[] str = new string[] { "my","myname","mys"};
    string res=GetLongestCommonPrefix(str);
    Console.WriteLine(res);
    Console.ReadKey();
}

private static string GetLongestCommonPrefix(string[] strs)
{
    if (strs.Length == 0) return "";
    if (strs.Length == 1) return strs[0];
    var min = int.MaxValue;
    foreach (var item in strs)
    {
        if (item.Length < min)
        {
            min = item.Length;
        }
    }
    var index = -1;
    for (int i=0; i < min; i++)
    {
        for (int j = 1; j < strs.Length; j++)
        {
            if (strs[j][i] != strs[0][i])
            {
                return strs[0].Substring(0, i);
            }
            else
            {
                index = i;
            }
        }
    }
    return strs[0].Substring(0,index+1);
}   

 

解析: 
輸入:字串陣列
輸出:字串
思想
  首先,分三部分,當陣列為空時,返回空字串;陣列中只有一個元素,輸出該元素;陣列中有若干字串,則進行以下操作。(注意:這裡也可以判斷陣列中是否含有空字串,有則返回空)
  其次,對於一般情況,先找出陣列中最小長度的字串,根據這個長度,從第一個字元開始遍歷。
  最後,將陣列中的每個字串和第一個字串的每個字元進行比較。相同則記錄字元索引值,否則返回共同子串。
時間複雜度:O(m*n) 其中m是單詞最大長度,n是陣列長度。

相關文章