Description
Write a function to find the longest common prefix string amongst an array of strings.
描述:找到一组字符串子数组中的最长公共前缀
像 LeetCode Leetcode Lee 这一组字符串的最长公共前缀就是Lee
思路:
先随便找一个作为暂时的公共前缀,即prefix ,当然一般就是数组中第一个字符串了,
然后用这个prefix一个一个跟字符后面的去匹配,就上面三个来说
prefix(初值为LeetCode) 与Leetcode,先找到他们两个的prefix,即Leet,
然后prefix值变为Leet,然后prefix继续与Lee匹配,prefix值更新为Lee,之后更多也是如此
接下来的问题就是如何找两个字符间的prefix
先说一下String 的 indexOf方法,
public int indexOf(String str)
If no such value of k exists, then
-1
is returned
返回这个字符串中子一次出现这个子串的起始位置,不存在返回-1
利用这个函数就好解决了,每次prefix与下一个字符串比较,不在下一个字符串里面就去掉prefix最后一个字符,一直找到最大的prefix,在于下一个比较。需要注意的是prefix长度,如果中间prefix.length()==0,return"";即没有公共前缀。
附上代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0 || strs[0].length() == 0)
return "";
String prefix = strs[0];
for(int i = 1; i < strs.length; i++)
{
while(strs[i].indexOf(prefix) != 0)
{
prefix = prefix.substring(0,prefix.length()-1);
if(prefix.length()==0)
return "";
}
}
return prefix;
}
}
令 是 substring 方法 不是 subString (哇,找了好几遍才发现的一个bug)