leetcode14最长公共前缀(String)

题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”

示例一

1
2
输入: ["flower","flow","flight"]
输出: "fl"

示例二

1
2
3
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

所有输入只包含小写字母 a-z 。

题解

思想:我们把字符串数组第一个元素作为比较对象,调用String的函数indexOf(String str)函数,该函数含义是:返回指定子字符串第一次出现的字符串内的索引。
例如:ab abc abd ac

  • abc.indexOf(ab)返回0,因为abc包含ab子字符串,且是从第0号索引开始的。
  • abd.indexOf(abc)返回-1,因为abd不包含abc子字符串。
    如果返回的不为0,我们设置prefix=prefix.substring(0, prefix.length() - 1),然后继续判断是否返回0,不是0,prefix字符串继续从末尾减去一个字符。最终得到的就是最长公共前缀。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class leetcode14 {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String prefix = strs[0];
for (String s : strs) {
while (s.indexOf(prefix) != 0){
prefix = prefix.substring(0, prefix.length() - 1);
}
}
return prefix;
}
}