【刷题笔记】14. 最长公共前缀

96 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

一、题目描述:

14. 最长公共前缀 - 力扣(LeetCode) (leetcode-cn.com)

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[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)