14.最長公共前綴 -LeetCode 14 - java

題目:編寫一個函數來查找字符串數組中的最長公共前綴

如果不存在公共前綴,返回空字符串 ""。

示例 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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章