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

猜你喜欢

转载自blog.csdn.net/NNnora/article/details/81478762