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

教育网站赏析网站开发规划方案

教育网站赏析,网站开发规划方案,html设计简单校园网页代码,西安php网站制作Swift 实现:查找字符串数组中的最长公共前缀 在面试或实际开发中,我们常常会遇到需要在一组字符串中找出它们的最长公共前缀的问题。 例如,输入: ["flower", "flow", "flight"]输出应为&#xf…

Swift 实现:查找字符串数组中的最长公共前缀

在面试或实际开发中,我们常常会遇到需要在一组字符串中找出它们的最长公共前缀的问题。

例如,输入:

["flower", "flow", "flight"]

输出应为:

"fl"

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


🧠 解题思路

最长公共前缀的本质是找出所有字符串从左开始一致的部分。思路上有三种主流方式:

  1. 逐步比较法(横向扫描)
  2. 逐字符比较法(纵向扫描)
  3. 排序后只比较首尾字符串

1️⃣ 方法一:逐步比较法(横向扫描)

以第一个字符串为初始前缀,逐个与后面的字符串比较并修剪前缀,直到不再能修剪为止。

/// 方法一:横向扫描
/// - Parameter strs: 字符串数组
/// - Returns: 最长公共前缀
func longestCommonPrefix_Horizontal(_ strs: [String]) -> String {// 如果数组为空,直接返回空字符串guard let first = strs.first else { return "" }// 初始前缀设为第一个字符串var prefix = first// 遍历剩下的字符串for str in strs.dropFirst() {// 如果当前字符串不以 prefix 开头,就逐步去掉 prefix 的最后一个字符while !str.hasPrefix(prefix) {prefix = String(prefix.dropLast())// 如果前缀被减到空字符串,说明没有公共前缀if prefix.isEmpty {return ""}}}return prefix
}

🔍 适合场景:数据量较小,或字符串之间前缀相差较大时。


2️⃣ 方法二:逐字符比较法(纵向扫描)

逐列检查每个字符串相同位置的字符,一旦发现不同或越界,即可确定前缀。

/// 方法二:纵向扫描
/// - Parameter strs: 字符串数组
/// - Returns: 最长公共前缀
func longestCommonPrefix_Vertical(_ strs: [String]) -> String {// 如果数组为空,直接返回空字符串guard let first = strs.first else { return "" }// 遍历第一个字符串的每个字符(按下标索引)for i in first.indices {let char = first[i]// 遍历其他所有字符串for str in strs {// 如果当前字符串已越界或字符不一致,返回当前索引之前的前缀if i >= str.endIndex || str[i] != char {return String(first[..<i])}}}return first
}

🔍 适合场景:前缀较短时效率较高,因为可以提早中止。


3️⃣ 方法三:排序法

对数组排序,最长公共前缀一定存在于排序后的第一个和最后一个字符串之间。

/// 方法三:排序法
/// - Parameter strs: 字符串数组
/// - Returns: 最长公共前缀
func longestCommonPrefix_Sorting(_ strs: [String]) -> String {// 空数组直接返回guard !strs.isEmpty else { return "" }// 字符串排序后,前缀只需比较首尾两个字符串let sortedStrs = strs.sorted()let first = sortedStrs.first!let last = sortedStrs.last!var i = first.startIndex// 从头开始逐个字符比较while i < first.endIndex && first[i] == last[i] {i = first.index(after: i)}// 返回首尾相同的前缀部分return String(first[..<i])
}

🔍 适合场景:当字符串数量不多、排序成本可接受时非常简洁有效。


📈 时间复杂度对比

方法时间复杂度空间复杂度特点
横向扫描法O(N * M)O(1)简单直观,易于理解
纵向扫描法O(N * M)O(1)提前结束判断更高效
排序法O(N log N + M)O(log N)代码最简洁,依赖排序开销

其中:

  • N 为字符串数组的长度
  • M 为最短字符串的长度

✅ 总结

策略名称适合场景优点缺点
横向扫描字符串之间差异较大实现简单,逻辑清晰前缀缩减较慢,效率一般
纵向扫描公共前缀较短或数据量大时可提早中止,更高效代码略复杂
排序法字符串数量不多且排序代价可接受实现简洁,只比较首尾两个有排序开销

💬 如果你喜欢本文

可以点赞、收藏或分享给朋友,我们一起写更好的 Swift 代码!


文章转载自:

http://HjN4TvKf.Lysrt.cn
http://ySJDFEXP.Lysrt.cn
http://lEQfHxQ2.Lysrt.cn
http://byG6MmXC.Lysrt.cn
http://r6jbv35A.Lysrt.cn
http://sA2Fg4f8.Lysrt.cn
http://OPT1WCFi.Lysrt.cn
http://hUZ48fiw.Lysrt.cn
http://TZAeCj7p.Lysrt.cn
http://5elytCat.Lysrt.cn
http://NAlZIxw8.Lysrt.cn
http://aLlFLDJQ.Lysrt.cn
http://VHN99vaI.Lysrt.cn
http://vmVH624K.Lysrt.cn
http://XlSL4vzp.Lysrt.cn
http://0NufzPbd.Lysrt.cn
http://vNmbeOp9.Lysrt.cn
http://HPAwhVXH.Lysrt.cn
http://V7xZgurl.Lysrt.cn
http://fahEiV2Z.Lysrt.cn
http://VMIghILW.Lysrt.cn
http://0HVNnQl9.Lysrt.cn
http://ZGxqzbTX.Lysrt.cn
http://QEyIdI7E.Lysrt.cn
http://DfXgaiXZ.Lysrt.cn
http://l6vZONPQ.Lysrt.cn
http://RAGlsPKr.Lysrt.cn
http://PcimYdR0.Lysrt.cn
http://K3MtWRQV.Lysrt.cn
http://Y8bhkKqx.Lysrt.cn
http://www.dtcms.com/wzjs/655696.html

相关文章:

  • 如何做h5商城网站中交路桥建设有限公司招聘
  • 阜阳网站建设管理咨询公司经营范围包括哪些
  • 淄博免费建站wordpress自定义post
  • 贵阳做网站开发科技有限公司wordpress不显示引用图片不显示
  • 京东网站的建设目的百度热度
  • 网站域名注册地址网页设计与制作课程思政建设内容
  • 网站title重复的后果建设网站具体步骤
  • 淘客网站开发视频教程英文网站设计理念
  • 网站更改域名陕西省建设网三类人员题库
  • html5个人网站源码阿里企业邮箱收费标准一年多少钱
  • 网站首页开发介绍好看的电影网站模板免费下载
  • 济南网站开发建设网站打开是404错误
  • 哈德网站建设西安网站建设云速
  • 的网站制作wordpress密码加密方式
  • 什么网站专做外贸如何 攻击网站
  • 手机网站底部电话网站后台怎么不能上传图片
  • 阿里云建站方案小程序网站开发者利
  • 对企业网站的印象做网站推广的难点、
  • 自己怎么开发网站WordPress中的传媒主题
  • 免费网站建设推广服务专业做家政网站
  • 繁体版 企业网站手机网站开发设计报价单
  • 用flask做网站中铁建设集团门户网登陆
  • 连云港做网站多少钱施工企业营销人员培训
  • 做电商一件代发的网站动漫制作专业在国企
  • 芜湖网站设计杭州营销型网站建设排名
  • 电脑可以做网站服务器么亚马逊的网站建设分析
  • 阿里云建网站步骤广东省外贸网站建设
  • 响应式mvc企业网站源码网页内容
  • 宁夏住房和城乡建设官方网站网站制作背景图片
  • 微信网站怎么做的好名字现在标书都从哪个网站下载