最长公共前缀-刷题总结

最长公共前缀:

编写一个函数来查找字符串数组中的最长公共前缀。

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

示例 1:

    输入: ["flower","flow","flight"]
    输出: "fl"

示例 2:

    输入: ["dog","racecar","car"]
    输出: ""
    解释: 输入不存在公共前缀。

说明:
所有输入只包含小写字母 a-z 。

/**

@author cosefy

@date 2020/6/15
*/
public class LongestCommonProfix {
public static void main(String[] args) {
    String[] strs = {"flower", "flow", "flight"};
    String s1 = test1(strs);
    String s2 = test2(strs);
    System.out.println("最长公共前缀是:" + s1);
    System.out.println("最长公共前缀是:" + s2);
}


解法一:依次比较每个字符串的字符,得到公共字符

思路:采用双重循环,依次比较每个字符串的字符。
分析:时间效率较低。

public static String test1(String[] strs) {
    StringBuffer s = new StringBuffer();
    boolean flag = true;
    if (strs.length == 0)
        return s.toString();
    if (strs.length == 1)
        return strs[0];
    for (int i = 0; i < minSzie(strs); i++) {   //第一层循环是每个字符串的第i个元素
        char temp = strs[0].charAt(i);
        for (int j = 1; j < strs.length; j++) {  //第二层循环表示第j个字符串
            if (temp == strs[j].charAt(i))
                continue;
            else {
                flag = false;
                break;
            }
        }
        if (flag) {
            s = s.append(temp);
        } else
            break;
    }
    return s.toString();
}

private static int minSzie(String[] strings) {    //函数用来得到字符串数组中最短字符串的长度
    int min = Integer.MAX_VALUE;
    for (int i = 0; i < strings.length; i++) {
        if (min > strings[i].length())
            min = strings[i].length();
    }
    return min;
}
解法二:每两个字符串进行比较

思路*:每次比较俩字符串,得出公共字符串,再和后面一个字符串比较。
分析:效率较第一种解法腰快捷。

public static String test2(String[] strs) {

​    if (strs.length == 0)
​        return "";
​    String res = strs[0];
​    for (int i = 1; i < strs.length; i++) {
​        int j = 0;
​        for (; j < res.length() && j < strs[i].length();j++){
​            if (res.charAt(j) != strs[i].charAt(j))
​                break;
​        }
​        res = res.substring(0, j);
​        if (res.equals(""))   //如果公共字符串为空,则直接返回""
​            return "";
​    }
​    return res;
}
}
原文地址:https://www.cnblogs.com/cosefy/p/13137659.html