持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
一、题目描述:
14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
二、思路分析:
不考虑最优解,直接使用暴力匹配:
首先需要注意是找公共的”前缀“,因此使用java的String自带的函数:str.startsWith()
先循环找到数组里面字符串最短的字符串,以及他的下标
然后循环整个字符串数组,用最短的字符串去匹配,如果都没有,则最短字符串减去最后一位的字符,然后继续循环匹配
直到有一个能匹配则返回,如果没有,则返回”“。
三、AC 代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
//先循环找到最短的字符串及其下标
String shoutStr = strs[0];
int shoutIndex = 0;
for (int i = 1; i < strs.length; i++)
{
if (strs[i].length() < shoutStr.length())
{
shoutStr = strs[i];
shoutIndex = i;
}
}
boolean findFlag = true;
//从最短字符串里面,从尾部逐个字符推出,判断其他每个是否以此为前缀
for (int i = shoutStr.length(); i > 0; i--)
{
String temp = shoutStr.substring(0, i);
for (int j = 0; j < strs.length; j++)
{
if (j == shoutIndex)
{
continue;
}
if (!strs[j].startsWith(temp))
{
findFlag = false;
break;
}
findFlag = true;
}
if (findFlag)
{
return temp;
}
}
return "";
}
}
范文参考:
C 遍历从第一个字母到最后一个字母, 有一个不相等,则退出循环 - 最长公共前缀 - 力扣(LeetCode)
执行用时: 0 ms , 在所有 C 提交中击败了 100.00% 的用户 内存消耗: 5.7 MB , 在所有 C 提交中击败了 72.62% 的用户 - 最长公共前缀 - 力扣(LeetCode)