###### tags: `Leetcode` `easy` `string` `python` `c++` # 14. Longest Common Prefix ## [題目來源:] https://leetcode.com/problems/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 "". ## 解題想法: 找前綴字串 * 初始先找最短的字串長度作為比較長度 * n個string 比較 n-1次即可 ## Python: ``` python= class Solution: def longestCommonPrefix(self, strs): ans = "" min_len = 200 # Preventation if not strs: return ans if len(strs) == 1: return strs[0] # Init for i in strs: print(i) if len(i) < min_len: min_len = len(i) print('(最短的str)min_len:',min_len) # Comparison for i in range(min_len): #ex: 原本len(strs)=4 有4個str j=0,1,2,3 #but 要倆倆依序比較: 所以讓j=0,1,2即可 才不會超出範圍 for j in range(len(strs)-1): if (strs[j][i] != strs[j+1][i]): return ans ans = ans + strs[j][i] return ans if __name__ == '__main__': result = Solution() strs = ["flower","flow","flight","flo"] print(result.longestCommonPrefix(strs)) ``` ## C++: ``` cpp= #include <iostream> #include <vector> using namespace std; class Solution { public: string longestCommonPrefix(vector<string> &strs) { if (strs.empty()) return ""; if (strs.size() == 1) return strs[0]; // init string ans = ""; int min_len = 200; for (string item : strs) { if (item.size() < min_len) min_len = item.size(); } // compare for (int i = 0; i < min_len; i++) { for (int j = 0; j < strs.size() - 1; j++) { if (strs[j][i] != strs[j + 1][i]) return ans; } ans += strs[0][i]; } return ans; } }; int main() { Solution res; vector<string> strs; strs = {"flower", "flow", "flight"}; cout << res.longestCommonPrefix(strs) << endl; return 0; } ```