当前位置: 首页 > wzjs >正文

免费网站制作平台下载一起做网店网站哪里进货的

免费网站制作平台下载,一起做网店网站哪里进货的,部门网站建设的目的和意义,张梅 合肥网站建设力扣14. 最长公共前缀:Java四种解法详解 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例: 输入:strs ["flower","flow","flight&quo…

力扣14. 最长公共前缀:Java四种解法详解

题目描述

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""
示例
输入:strs = ["flower","flow","flight"] → 输出:"fl"
输入:strs = ["dog","racecar","car"] → 输出:""


解法一:横向扫描(逐步缩小前缀)

代码实现

public class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) return "";String prefix = strs[0];for (int i = 1; i < strs.length; i++) {int j = 0;while (j < prefix.length() && j < strs[i].length() && prefix.charAt(j) == strs[i].charAt(j)) {j++;}prefix = prefix.substring(0, j);if (prefix.isEmpty()) break;}return prefix;}
}

复杂度分析

  • 时间复杂度:O(mn),其中 m 是字符串平均长度,n 是数组长度。最坏情况下每个字符串都需完全比较。
  • 空间复杂度:O(1),仅需常数空间存储中间变量。

核心思路

以第一个字符串为初始前缀,依次与其他字符串逐字符比较,逐步缩小前缀范围。若中途前缀为空,则提前终止。


解法二:纵向扫描(逐列比较)

代码实现

public class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) return "";for (int i = 0; i < strs[0].length(); i++) {char c = strs[0].charAt(i);for (int j = 1; j < strs.length; j++) {if (i >= strs[j].length() || strs[j].charAt(i) != c) {return strs[0].substring(0, i);}}}return strs[0];}
}

复杂度分析

  • 时间复杂度:O(mn),逐列比较所有字符串的每个字符。
  • 空间复杂度:O(1),无需额外存储。

核心思路

从第一个字符开始,依次比较所有字符串的同一列字符,直到某一列不匹配,返回当前列之前的子串。


解法三:排序后首尾比较

代码实现

import java.util.Arrays;public class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) return "";Arrays.sort(strs);String first = strs[0], last = strs[strs.length - 1];int minLen = Math.min(first.length(), last.length());int i = 0;while (i < minLen && first.charAt(i) == last.charAt(i)) {i++;}return first.substring(0, i);}
}

复杂度分析

  • 时间复杂度:O(n log n + m),排序耗时 O(n log n),比较首尾字符串耗时 O(m)
  • 空间复杂度:O(log n),排序的栈空间开销。

核心思路

排序后,最长公共前缀只需比较首尾字符串的公共部分。排序后首尾差异最大,因此公共前缀即全局公共前缀。


解法四:利用 startsWith 方法优化

代码实现

public class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) return "";String prefix = strs[0];for (String s : strs) {while (!s.startsWith(prefix)) {prefix = prefix.substring(0, prefix.length() - 1);if (prefix.isEmpty()) return "";}}return prefix;}
}

复杂度分析

  • 时间复杂度:O(mn),最坏情况下每个字符均需截取。
  • 空间复杂度:O(1),直接操作字符串。

核心思路

以第一个字符串为基准,逐步缩短前缀长度,直到所有字符串均以该前缀开头。利用 startsWith 简化字符比较逻辑。


各解法对比

解法优点缺点适用场景
横向扫描逻辑清晰,代码简洁需要频繁截取子串通用场景
纵向扫描直接比较,无额外操作对空字符串处理需谨慎字符串长度差异小的场景
排序后比较减少比较次数,代码高效排序可能引入额外时间开销字符串数量较少的场景
startsWith代码简洁,易读频繁截取可能影响性能快速实现需求

示例解析

以输入 ["flower", "flow", "flight"] 为例:

  1. 横向扫描
    • 初始前缀 "flower",与 "flow" 比较后缩小为 "flow"
    • 再与 "flight" 比较,最终得到 "fl"
  2. 纵向扫描
    • 比较所有字符串的第0列字符 f,第1列字符 l,第2列字符 oi 不匹配,返回前两列 "fl"

总结

以上四种方法均可高效解决问题,推荐根据场景选择:

  • 纵向扫描:适用于字符串长度差异较小的场景,直接逐列比较效率高。
  • 排序法:若字符串数量较少,排序后首尾比较更高效。
  • startsWith:适合快速实现,代码简洁但需注意性能。

可直接复制代码到力扣运行,保证通过!


欢迎在评论区留言讨论其他优化思路或问题!

http://www.dtcms.com/wzjs/587159.html

相关文章:

  • 做网站挣钱经历计算机培训班推荐
  • 网站推广策划书范文安徽网站设计定制
  • 网站首页 栏目页 内容页深圳专业建网站
  • 作品 上海高端网站设计网络安全方案设计
  • 男女做污的网站网络推广网络营销公司
  • 小网站asp网站伪静态教程
  • 县级以下不允许建设网站网站建设官方网站
  • 华丽的网站模板seo搜索引擎优化方法
  • 校园网站建设方案模板下载郑州网站seo排名
  • 优惠券网站建设制作做外贸月薪3万要多久
  • 外贸网站首页游戏网站做的思想步骤
  • 网站开发商标属于哪一类wordpress 响应速度慢
  • 左侧导航栏网站莞城建设网站
  • python怎么做专门的手机网站长沙网站设计
  • 自建站工具拍宣传片比较好的公司
  • 网站源码怎么获取百度指数数据下载
  • 注册网站合集腾讯云提供网站建设吗
  • 网站建设介绍文字装修门面一般找谁
  • 宁波网站设计服务收费价格wordpress用户邀请系统
  • 做新媒体和网站公司管理系统网站
  • 图书馆网站建设情况汇报如何注册一个网站域名
  • 网站开发 京东泉州有专门帮做网站的吗
  • 网站后台管理系统进不去怎么办网站抄袭别人的做可以吗
  • 大连网站建设ewaylife江苏网站建设yijuce
  • 企业网站美化公司网站的seo优化
  • 网站三站合一网页加载流程
  • 网站 维护费用wordpress调查插件
  • 跳转到手机网站哪个网站做恒指好
  • 能用VUE做网站iis8出现在网站首页
  • 公司网站的seo怎么做郑州网约车从业资格证报名