题目描述:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
示例1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明
所有输入只包含小写字母 a-z 。
解题思路:
- 首先判断数组是否为空,若为空返回"";
- 若数组只有一个元素,则返回它;
- 以上条件都不满足,则先找出数组中长度最小的字符串,接着用这个最小的字符串当作前缀依次和数组中的每个字符串比较,是否包含前缀 sub,若不包含,则使 sub 变成 sub - 1的字符串,直到找到他们的公共前缀。
- 表达式
strs[i].indexOf(sub)的意思是数组strs中的第 i 个字符串是否包含前缀 sub ,若不包含则返回 -1
代码如下:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0 || strs == null)
return "";
if (strs.length == 1)
return strs[0];
//寻找最短字符串的位置
int shortestStringIndex = 0;
int len = strs[0].length();
for (int i = 0; i < strs.length; i++) {
if (strs[i].length() < len) {
len = strs[i].length();
shortestStringIndex = i;
}
}
//最短字符串与其他字符串比较,找公共前缀
String sub = strs[shortestStringIndex];
for (int i = 0; i < strs.length; i++) {
while (strs[i].indexOf(sub) != 0)
sub = sub.substring(0, sub.length() - 1);
}
return sub;
}
}


463

被折叠的 条评论
为什么被折叠?



