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
- C# 寫 LeetCode easy #14 Longest Common PrefixC#LeetCode
- LeetCode | 14. Longest Common Prefix的三種演算法LeetCode演算法
- LeetCode Longest Common Prefix(014)解法總結LeetCode
- LeetCode - 014 - 最長公共字首(longest-common-prefix)LeetCode
- Leetcode學習筆記(1)LeetCode筆記
- DAY 24 LeetCode學習筆記LeetCode筆記
- MYSQL學習筆記14: 函式MySql筆記函式
- 學習筆記14:模型儲存筆記模型
- 【Python學習】學習筆記 14-15 字串Python筆記字串
- 我的C#學習筆記14C#筆記
- leetcode學習筆記09 palindrome-numberLeetCode筆記
- leetcode學習筆記73 Set Matrix ZeroesLeetCode筆記
- 2020-11-14springboot學習筆記03Spring Boot筆記
- KnockoutJS學習筆記14:KonckoutJS click繫結JS筆記
- iOS學習筆記14 網路(三)WebViewiOS筆記WebView
- 最長公共子序列 Longest Common Subsequence
- 強化學習-學習筆記14 | 策略梯度中的 Baseline強化學習筆記梯度
- Adaptive AUTOSAR 學習筆記 14 - 車輛診斷APT筆記
- 吳恩達機器學習筆記 —— 14 無監督學習吳恩達機器學習筆記
- 林軒田機器學習基石課程學習筆記14 — Regularization機器學習筆記
- Centos學習筆記14 – java程式啟動指令碼CentOS筆記Java指令碼
- Solidity語言學習筆記————14、左值運算子Solid筆記
- SPOJ 1811 Longest Common Substring(字尾自動機)
- Leetcode 32 Longest Valid ParenthesesLeetCode
- LeetCode 5 (Longest Palindromic Substring)LeetCode
- Git 分支的建立與切換 —— Git 學習筆記 14Git筆記
- numpy的學習筆記\pandas學習筆記筆記
- [LeetCode] 5. Longest Palindromic SLeetCode
- [LeetCode] 32. Longest Valid ParenthesesLeetCode
- Solidity語言學習筆記————14、動態位元組陣列Solid筆記陣列
- 林軒田機器學習技法課程學習筆記14 — Radial Basis Function Network機器學習筆記Function
- 學習筆記筆記
- 《CMake實踐》筆記二:INSTALL/CMAKE_INSTALL_PREFIX筆記
- Redis基礎知識(學習筆記14--釋出/訂閱)Redis筆記
- [LeetCode] 2419. Longest Subarray With Maximum Bitwise ANDLeetCode
- [LeetCode] 2831. Find the Longest Equal SubarrayLeetCode
- Leetcode 3 Longest Substring Without Repeating CharactersLeetCode