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.

【思路】

Longest Common Prefix 最長共同前綴,因為是前綴所以他一定是從第一個位置的字串開始比較,

然後因為一定要共有,所以每次取第一個值去比較後幾個就好了,跑個兩個迴圈試試看,記住下列兩種點:

1:兩陣列比對時,第一個指標的字串錯了就趕快回覆空字串了,因為這就是錯! 錯! 錯!

2:暫存變數的控制

【解法】

☆JAVA

Java這邊比較單純,應用好indexOf可以迅速比對字串間是否符合

class Solution {
    public String longestCommonPrefix(String[] strs) {
        String temp = "";
        if(strs != null && strs.length >0){    
            temp = strs[0];                                            //先用第一個字串來比對
            if(temp == ""){return "";}                                 //如果是空字串就不要玩了
            for(int i = 1 ; i<strs.length ; i++){                      //從次一個開始比  
                while (strs[i].indexOf(temp) != 0)                     //這邊應用indexOf 比較 如果他不是從第一個查到位置 != 0  
                    temp = temp.substring(0, temp.length() - 1);       //我們就減少他最後一個字串 直到比到為止
            }
        }
        return temp;
    }
}

☆Python

老實說這段寫起來蠻亂的 因為實際上卡了一段時間,後來才想說算了 就用許多變數來控制吧

class Solution:
    def longestCommonPrefix(self, x):
        # 用這個陣列當作範例Input值 ["flower","flow","flight"]
        result = "";                                        #回傳答案 要控制好該值
        compTemp = "";                                      #當下比對的[陣列-A]
        if(x is not None and len(x) != 0):                  #防呆
            result = str(x[0]);                             #既然有長度 那初始值就取第一個
            for i in range(1,len(x)):                       #比對陣列迴圈-因為我們 已經取第一個了 然長度從第二個開始 就是指標 1
                temp = x[i];                                #比對陣列 第一次是 flow 再來是 flight
                for j in range(min(len(result),len(temp))): #用陣列-A和比對陣列比較誰最短 就用此長度 不然怕溢出陣列指標
                    if(result[0] != temp[0]):               #第一個指標的字元錯了就回覆空字串
                        return "";
                    if(result[j] == temp[j]):               #如果對的話 
                        compTemp = compTemp + temp[j];      #就將其字元存入暫存 compTemp
                result = compTemp;                          #然後塞到 result 內 , 這樣之後就用result當作 陣列-A 去做後續..
                compTemp = '';                              #如此一來我們都是用 公共前綴 來比較 而不是陣列與陣列比較
        return  result;

results matching ""

    No results matching ""