leetcode學習筆記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: strs = [“flower”,“flow”,“flight”]
Output: “fl”
Example 2:
Input: strs = [“dog”,“racecar”,“car”]
Output: “”
Explanation: There is no common prefix among the input strings.
Constraints:
- 0 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] consists of only lower-case English letters.
思考
最長的共同字首,所以每個字元從頭開始匹配看是不是相同就好了.
方法1
假設最短字元長度為n, 每個字元都只需要最多檢查到第n位就可以了.或者直接把最短長度的字元作為起始, 開始遍歷.
時間複雜度
O
(
M
∗
N
)
O(M * N)
O(M∗N).
空間複雜度
O
(
N
)
O(N)
O(N).
M:字串個數
N:最短字串長度
class Solution {
public String longestCommonPrefix(String[] strs) {
int len = 201;
String res = "";
// 找到最小的len, 以及對應的str
for(String str : strs){
if(str.length() < len){
len = str.length();
res = str;
}
}
for(String str : strs){
for(int i = 0; i < len; i++){
if(str.charAt(i) != res.charAt(i)){
len = i;
res = res.substring(0, len);
break;
}
}
}
return res;
}
}
方法2
方法1是按照字串來進行遍歷.也可以按照位數來進行遍歷.
共同字首, 也就是說如果存在,那麼所有的字串的一定是從第一個字元開始有相同的部分.那麼就從第一個字元開始遍歷,直到碰到不相同的,或者是長度不夠的字元為止.
時間複雜度其實和方法一樣,不過省去了很多string的操作.在極大量資料的時候估計會有效能提升.
時間複雜度
O
(
M
∗
N
)
O(M * N)
O(M∗N).
空間複雜度
O
(
N
)
O(N)
O(N).
M:字串個數
N:最短字串長度
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0)
return "";
String f = strs[0];
for(int i = 0, len = f.length();i < len; i++){
char c = f.charAt(i);
for(int j = 0; j < strs.length; j++){
if(i >= strs[j].length() || c != strs[j].charAt(i)){
return f.substring(0, i);
}
}
}
return f;
}
}
相關文章
- Leetcode 14 Longest Common PrefixLeetCode
- LeetCode 第 14 題(Longest Common Prefix)LeetCode
- Leetcode Longest Common PrefixLeetCode
- [LeetCode]Longest Common PrefixLeetCode
- LeetCode解題-#14-Longest Common PrefixLeetCode
- Leetcode-Longest Common PrefixLeetCode
- Longest Common Prefix leetcode javaLeetCodeJava
- C# 寫 LeetCode easy #14 Longest Common PrefixC#LeetCode
- LeetCode Longest Common Prefix(014)解法總結LeetCode
- LeetCode - 014 - 最長公共字首(longest-common-prefix)LeetCode
- LeetCode | 14. Longest Common Prefix的三種演算法LeetCode演算法
- [LeetCode] Longest Common Prefix 最長共同字首LeetCode
- Longest Common Prefix字串最長公共字首問題字串
- Leetcode學習筆記(1)LeetCode筆記
- DAY 24 LeetCode學習筆記LeetCode筆記
- MYSQL學習筆記14: 函式MySql筆記函式
- 學習筆記14:模型儲存筆記模型
- 【Python學習】學習筆記 14-15 字串Python筆記字串
- 我的C#學習筆記14C#筆記
- LintCode-Longest Common Subsequence
- leetcode學習筆記73 Set Matrix ZeroesLeetCode筆記
- iOS學習筆記14 網路(三)WebViewiOS筆記WebView
- LintCode-Longest Common Substring
- leetcode學習筆記09 palindrome-numberLeetCode筆記
- 【Go學習筆記14】嵌入型別(繼承)Go筆記型別繼承
- Object C學習筆記14-分類(category)Object筆記Go
- numpy的學習筆記\pandas學習筆記筆記
- [LeetCode] 2414. Length of the Longest Alphabetical Continuous SubstringLeetCodeAlphabet
- 強化學習-學習筆記14 | 策略梯度中的 Baseline強化學習筆記梯度
- KnockoutJS學習筆記14:KonckoutJS click繫結JS筆記
- Adaptive AUTOSAR 學習筆記 14 - 車輛診斷APT筆記
- Centos學習筆記14 – java程式啟動指令碼CentOS筆記Java指令碼
- 吳恩達機器學習筆記 —— 14 無監督學習吳恩達機器學習筆記
- IT學習筆記筆記
- 學習筆記筆記
- 【學習筆記】數學筆記
- Git 分支的建立與切換 —— Git 學習筆記 14Git筆記
- 林軒田機器學習基石課程學習筆記14 — Regularization機器學習筆記