Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
Solution1
- 最简单的方法就是遍历去比较每一个字符串。第一个字符串与第二个字符串进行比较得到一个前缀,然后拿这个前缀去跟第三个字符串去进行比较,以此类推。代码如下:
public class Solution {
public String longestCommonPrefix(String[] strs) {
int n = strs.length;
if(n==0) return "";
String cp = strs[0];//将前缀初始化为第一个字符串
for(int i=1;i<n;i++){
int len = Math.min(cp.length(),strs[i].length());
int j = 0;
for(;j<len&&cp.charAt(j)==strs[i].charAt(j);j++);
cp = cp.substring(0,j);
}
return cp;
}
}
Solution2
- 解法一的思路是遍历得到每两个字符串之间的公共前缀,另一种思路是:由于前缀不可能比第一个字符串还长,所以可以针对第一个字符串考察其每一个字符,如果遍历得到的字符在其他所有字符串中都在相同位置上出现,则表明前缀可以继续扩展到这个字符,如果不满足则表明前缀已经是最长了。代码如下:
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0) return "";
StringBuffer sb = new StringBuffer();
for(int i=0;i<strs[0].length();i++){//整体的公共前缀不可能长于第一个字符串
char c = strs[0].charAt(i);
for(String s:strs) if(i>=s.length()||s.charAt(i)!=c) return sb.toString();//表明公共前缀无法继续扩展了。
sb.append(c);//扩展公共前缀。
}
return sb.toString();
}
}