题目:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1: 输入: ["flower","flow","flight"]
输出: "fl"
示例 2: 输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明: 所有输入只包含小写字母 a-z 。
思路:
标签:链表
1 当字符串数组长度为 0 时则公共前缀为空,直接返回
2 令最长公共前缀 ans 的值为第一个字符串,进行初始化
3 遍历后面的字符串,依次将其与 ans 进行比较,两两找出公共前缀,最终结果即为最长公共前缀
4 如果查找过程中出现了 ans 为空的情况,则公共前缀不存在直接返回
时间复杂度:O(s)O(s),s 为所有字符串的长度之和
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0) return "";
String prefix=strs[0];
for(int i = 1;i < strs.length;i++) {
int j = 0;
for(;j < prefix.length() && j < strs[i].length();j++) {
if(prefix.charAt(j) != strs[i].charAt(j)) {
break;
}
}
prefix = prefix.substring(0, j);
if(prefix == "") return prefix;
}
return prefix;
}
}
第一次写的憨憨算法:~.~ 还是要多练,思路才能更加清晰,方法好一点
public static String longestCommonPrefix1(String[] strs) {
if (strs == null || strs.length == 0) return "";
int minlen = strs[0].length();
for(int i = 0;i < strs.length;i++) {
if(minlen > strs[i].length()) {
minlen = strs[i].length();
}
}
System.out.println(minlen+" minlen ");
StringBuffer str=new StringBuffer();
char curr = 0 ;
for(int i = 0;i < minlen;i++) {
for(int j = 0;j < strs.length-1;j++) {
curr=strs[j].charAt(i);
System.out.println(curr+"*******"+strs[j+1].charAt(i));
if(curr != strs[j+1].charAt(i)) {
curr = 0;
return str.toString();
}
}
if(curr != 0)
str.append(curr);
}
String res=str.toString();
return res;
}