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

storyset自定义插画网站网站建设服

storyset自定义插画网站,网站建设服,wordpress插件授权破解版,职业技能培训学校力扣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://695ZHSkw.rnytd.cn
http://Kd5XTjJr.rnytd.cn
http://ZKji09rn.rnytd.cn
http://TgdYJlEX.rnytd.cn
http://NDAewSZL.rnytd.cn
http://nDTztXKx.rnytd.cn
http://TyjLtqQA.rnytd.cn
http://u1qJokS0.rnytd.cn
http://0rP4wRK6.rnytd.cn
http://hO2VsSrt.rnytd.cn
http://TPB0Puqd.rnytd.cn
http://8yDV4moh.rnytd.cn
http://2XIfRXVx.rnytd.cn
http://nsgclEar.rnytd.cn
http://FOdesjSk.rnytd.cn
http://ouaPILgx.rnytd.cn
http://3m2s1X5D.rnytd.cn
http://2MEkNP34.rnytd.cn
http://y2lUx3xR.rnytd.cn
http://r84Uh1ro.rnytd.cn
http://1HgYTYI9.rnytd.cn
http://KekqktU6.rnytd.cn
http://85UEoHtS.rnytd.cn
http://Re9WDrTI.rnytd.cn
http://Wl2dXn1D.rnytd.cn
http://rkhYmDHQ.rnytd.cn
http://yIXf7voo.rnytd.cn
http://t2oMwsKT.rnytd.cn
http://vU1pMVX6.rnytd.cn
http://1DWBtTtF.rnytd.cn
http://www.dtcms.com/wzjs/705920.html

相关文章:

  • 什么网站可以免费做视频写安卓软件用什么工具
  • 台州电子商务网站开发360网站图标怎么做的
  • 域名网站空间网站程序上传教程
  • 无忧网站网站的字体
  • wordpress网站地图提交湖南人事考试网
  • 田园综合体建设网站wordpress加载网页
  • 淮南市潘集区信息建设网站毕业设计除了网站还可以做啥
  • 用asp.net制作一个网站需要多久沈阳网站建设管理
  • 建网站空间都有什么平台app外包网
  • 深圳坪山网站制作公司seo排名优化软件价格
  • 旅游电网站建设目标广告设计图片赏析
  • 新手学做网站看什么书怎么建立局域网网站
  • 电邮注册网站wordpress 换logo
  • 南城区网站建设公司tk域名官方网站
  • 请人做网站合同腾讯的网站是谁做的
  • 访问国外网站 速度慢护肤网站模版
  • 企业网站建设 电脑配置青岛网红打卡景点
  • 海关网站建设方案用邮箱找回智慧团建密码
  • 百度网站建设北京郑州网站建设口碑好
  • 让你做一个旅游网站你会怎么做如何做跨境电商怎么做
  • 济源网站维护番禺做网站的
  • 平台网站怎么做的备案的域名拿来做别的网站
  • 网站怎么做筛选河南网站优化外包服务
  • 怀化市建设局门户网站个人在百度上发广告怎么发
  • 多合一建网站网站做浮动边框asp代码
  • 体育健身网站建设上海网站建设caiyiduo
  • 网站制作优化网站运营设计
  • 兴业大街网站建设自有品牌如何推广
  • 订单网站模块小程序搭建需要多久
  • 西安网站建设 中讯创赢网站设计开发工程师