题目内容
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-common-prefix
分析
根据题目内容,分析是要返回这些字符串前几位相同的最长子串
首先读出这些串,各放入一个字符数组,遍历,并且比较,第一次就都不同,就返回空,之后每次有一个相同的,就往新数组里放一个
那么难点就在于,找出最小长度,这就是遍历的次数,然后每个都要比较,每个子字符串都要放进一个字符数组里,如果有str长度为n,那就得比较n次,这显然不显示
然后改用java里的sort方法,排列出各个字符串,其中是按照字母排出来的,比如a,aa,aab,那只需要比a和aab的公共区域,就可以涵盖中间的了,长度也只需要比一次,这是代码
import java.util.Arrays;
class Solution {
public String longestCommonPrefix(String[] strs) {
int l = strs.length;
StringBuffer sb =new StringBuffer(200);
Arrays.sort(strs);
int ml= Math.min(strs[0].length(),strs[l-1].length());
if(ml==0)
{
return "";
}
else{
for(int i= 0;i<ml;i++){
if(strs[0].charAt(i)==strs[l-1].charAt(i))
{
sb.append(strs[0].charAt(i));
}
else
{
return sb.toString();
}
}}
return sb.toString();
}
}
中间出错是,不同的情况就要直接返回,不能比后面了
执行后结果通过
不是很好,因为用了一些java函数,但之后有机会再优化吧