Longest Common Prefix
Description
Write a function to find the longest common prefix string amongst an array of strings.
Tags: String
思路
题意是让你从字符串数组中找出公共前缀,我的想法是找出最短的那个字符串的长度 minLen
,然后在 0...minLen
的范围比较所有字符串,如果比较到有不同的字符,那么直接返回当前索引长度的字符串即可,否则最后返回最短的字符串即可。
java:
class Solution {
public String longestCommonPrefix(String[] strs) {
int len = strs.length;
if (len == 0) return "";
int minLen = 0x7fffffff;
for (String str : strs) minLen = Math.min(minLen, str.length());
for (int j = 0; j < minLen; ++j)
for (int i = 1; i < len; ++i)
if (strs[0].charAt(j) != strs[i].charAt(j))
return strs[0].substring(0, j);
return strs[0].substring(0, minLen);
}
}
与java的解法思路大致相同, 不过少了找出最短的那个字符串的长度 minLen
这个环节。
我直接假定字符串数组里的第一个字符串的长度是最短的,->for (i in 0 until strs[0].length) {
后面在遍历时遇到长度小于等于index的字符串时,直接返回结果.->if (str.length <= i) return ret
(也有可能在此之前就返回了结果)。->if (ch != str[i]) return ret
kotlin:
class Solution {
fun longestCommonPrefix(strs: Array<String>): String {
if (strs.isEmpty()) return ""
var ret = ""
for (i in 0 until strs[0].length) {
val ch = strs[0][i]
for (str in strs) {
if (str.length <= i) return ret
if (ch != str[i]) return ret
}
ret += ch
}
return ret
}
}
js 的思路也是类似,用到 every
函数对数组进行操作,
JavaScript
var longestCommonPrefix = function(strs) {
if (strs.length === 0) {
return ''
} else {
var prefix = strs[0] // 最短的字符串
for (var i = 1; i < strs.length; i++) {
if (strs[i].length < prefix.length){
prefix = strs[i]
}
}
while(prefix) {
var b = strs.every(function (item) {
return (item.indexOf(prefix) === 0)
}) // 判断数组元素是否都包含最短的字符串
if (b) { //所以元素都包含prefix
return prefix
} else { //并不是所以元素都包含prefix,prefix截取掉最后一个字符
prefix = prefix.substring(0, prefix.length - 1)
}
}
return ''
}
};
结语
如果你同我们一样热爱数据结构、算法、LeetCode,可以关注我们 GitHub 上的 LeetCode 题解:LeetCode-Solution