【算法】14. 最长公共前缀(多语言实现)
【摘要】 14. 最长公共前缀:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 样例 1:输入: strs = ["flower","flow","flight"] 输出: "fl" 样例 2:输入: strs = ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 提示:1 <= strs.length <= 2000...
14. 最长公共前缀:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
样例 1:
输入:
strs = ["flower","flow","flight"]
输出:
"fl"
样例 2:
输入:
strs = ["dog","racecar","car"]
输出:
""
解释:
输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
分析:
- 面对这道算法题目,二当家的陷入了沉思。
- 公共前缀,就是每个字符串的相同前缀。
- 可以先看所有字符串的第一个字符是否相同,如果相同再看下一个,直到最短字符串的长度或者遇到字母不同。
- 也可以先找到第一个和第二个字符串的公共前缀,再用它和第三个字符串找公共前缀,直到结束。
题解:
rust
impl Solution {
pub fn longest_common_prefix(strs: Vec<String>) -> String {
strs.split_first().map(|(first, tail)| {
tail.iter().fold(first.as_str(), |ans, s| {
&ans[0..s.as_bytes().iter()
.zip(ans.as_bytes())
.take_while(|(x, y)| x == y)
.count()]
}).to_string()
}).unwrap()
}
}
go
func longestCommonPrefix(strs []string) string {
ans := strs[0]
l := len(strs)
for i := 1; i < l; i++ {
str := strs[i]
index := 0
var size int
if len(ans) < len(str) {
size = len(ans)
} else {
size = len(str)
}
for index < size && ans[index] == str[index] {
index++
}
ans = ans[0:index]
}
return ans
}
c++
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string ans = strs[0];
for (int i = 1; i < strs.size(); ++i) {
string str = strs[i];
int size = min(ans.size(), str.size());
int index = 0;
while (index < size && ans[index] == str[index]) {
++index;
}
ans = ans.substr(0, index);
}
return ans;
}
};
java
class Solution {
public String longestCommonPrefix(String[] strs) {
String ans = strs[0];
for (int i = 1; i < strs.length; ++i) {
String str = strs[i];
int size = Math.min(ans.length(), str.length());
int index = 0;
while (index < size && ans.charAt(index) == str.charAt(index)) {
++index;
}
ans = ans.substring(0, index);
}
return ans;
}
}
typescript
function longestCommonPrefix(strs: string[]): string {
let ans = strs[0];
for (let i = 1; i < strs.length; ++i) {
const str = strs[i];
const size = Math.min(ans.length, str.length);
let index = 0;
while (index < size && ans[index] === str[index]) {
++index;
}
ans = ans.substring(0, index);
}
return ans;
};
python
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
ans = strs[0]
for i in range(1, len(strs)):
str = strs[i]
size = min(len(ans), len(str))
index = 0
while index < size and ans[index] == str[index]:
index += 1
ans = ans[:index]
return ans
非常感谢你阅读本文~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://bbs.huaweicloud.com/community/usersnew/id_1628396583336561 博客原创~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)