leecode014最长公共前缀
package com.;
import java.util.Arrays;
/**
* @Author:
* @Date: 2021/11/15/15:05
* @Description:
**/
public class leecode014 {
/**
* 编写一个函数来查找字符串数组中的最长公共前缀。
*
* 如果不存在公共前缀,返回空字符串 ""。
*
*
*
* 示例 1:
*
* 输入:strs = ["flower","flow","flight"]
* 输出:"fl"
* 示例 2:
*
* 输入:strs = ["dog","racecar","car"]
* 输出:""
* 解释:输入不存在公共前缀。
*
*
* 提示:
*
* 1 <= strs.length <= 200
* 0 <= strs[i].length <= 200
* strs[i] 仅由小写英文字母组成
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/longest-common-prefix
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public static String longestCommonPrefix(String[] strs) {
if (strs == null||strs.length == 0) return "";
String prefix = strs[0];
for (String s : strs){
while (s.indexOf(prefix)!=0){
prefix = prefix.substring(0, prefix.length()-1);
}
}
return prefix;
}
public static String longestCommonPrefix2(String[] strs) {
if (strs == null||strs.length == 0) return "";
Arrays.sort(strs);
String s1 = strs[0];
String s2 = strs[strs.length - 1];
while (s1.indexOf(s2)!=0){
s2 = s2.substring(0, s2.length()-1);
}
return s2;
}
public static void main(String[] args) {
System.out.println(longestCommonPrefix2(new String[]{"flower","flow","flight"}));
}
}
本题使用暴力算法的时间复杂度是O(m*n),但是巧的是这个时间复杂度是本题的最简单的时间复杂度,解法2使用的是将strs先排序之后比较第一个和最后一个的最长公共前缀。使用的方法是indexof,返回的是相同字符串的位置
eg abcd 和 cd 返回的是2