題目:編寫一個函數來查找字符串數組中的最長公共前綴。
如果不存在公共前綴,返回空字符串 ""。
示例 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;
}