1. 程式人生 > >leetcode-14. Longest Common Prefix

leetcode-14. Longest Common Prefix

題目型別:

字串

題意:

Write a function to find the longest common prefix string amongst an array of strings.

找出一個字串陣列中所有字串的最長共同==字首==。

字串API:

==indexOf()的用法==:返回字元中indexof(string)中字串string在父串中首次出現的位置,沒有返回-1;

==lastIndexOf()的用法:==返回字串中target的最後一次出現位置

我的思路:依次對比

效率:11%

  1. 初始化公共字首sub為第一個字串str[0]
  2. 如果有超過一個字串,迴圈對比sub和之後的每一個字串,取公共部分為sub
class Solution {
    public String longestCommonPrefix(String[] strs) {
        int len = strs.length;
        if (len == 0) return "";
        String prefix = strs[0];
        if (len == 1) return prefix;
        for(int i = 1; i < len; i++){
            String
cur = strs[i]; int prefixLen = prefix.length(); int curLen = cur.length(); boolean changed = false; for (int j = 0; j < Math.min(prefixLen, curLen); j++) { if (prefix.charAt(j) != cur.charAt(j)) { prefix = prefix.substring(0
, j); changed = true; break; } } prefix = (!changed &&curLen < prefixLen) ? cur : prefix; } return prefix; } }

方法二:indexOf

效率:80%

  1. 初始化prefix為strs[0]
  2. 迴圈遍歷strs的每一個字串str,如果str.indexOf(prefix) == 0,證明公共字首不變,仍未為prefix;如果不為0,那麼可能未找到(prefix = abcd, str = abc),也可能在後面(prefix = abc, str = dabc),那麼將==prefix截去最後一個字元==,再到該str中查詢,直至找到位置為0或者不存在prefix(”“)
class Solution {
    //方法二:indexOf
    public String longestCommonPrefix(String[] strs) {
        int len = strs.length;
        if (len == 0) return "";
        String prefix = strs[0];
        if (len == 1) return prefix;
        for (String str : strs) {
            while (str.indexOf(prefix) != 0) {
                prefix = prefix.substring(0, prefix.length() - 1);
            }
        }
        return prefix;
    }
}