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

江宁网站建设价格百度发布平台官网

江宁网站建设价格,百度发布平台官网,京东网页版电脑版,免费网站建设加盟网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

在这里插入图片描述
在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:极星会首批签约作者

文章目录

    • 摘要
    • 描述
    • 题解答案
      • KMP 最长前缀匹配
    • 题解代码分析
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结
    • 未来展望
    • 参考资料

摘要

在字符串处理问题中,构造最短回文串是一种常见的面试考察点。本篇文章将探讨如何在字符串前面添加最少的字符,使其成为回文串。我们将使用 KMP(Knuth-Morris-Pratt)部分匹配表 来优化搜索过程,使其时间复杂度达到 O(n)。最后,我们通过示例代码进行测试,并分析其时间和空间复杂度。

描述

给定一个字符串 s,可以在字符串前面添加字符,使其转换为 最短回文串,并返回最终结果。例如:

  • 示例 1

    输入: "aacecaaa"
    输出: "aaacecaaa"
  • 示例 2

    输入: "abcd"
    输出: "dcbabcd"

约束条件

  • 0 <= s.length <= 5 * 10^4
  • s 仅包含小写英文字母。

题解答案

KMP 最长前缀匹配

思路

  1. 构造辅助字符串:我们将 s 反转,并构造 newStr = s + "#" + reversed(s)
  2. 构造 LPS(最长前缀后缀匹配)数组
    • LPS 数组的最后一个元素代表 s 本身已经是回文的最大部分,其余部分需要添加到 s 前面。
  3. 生成结果
    • 计算 prefixToAdd = rev.prefix(s.count - LPS.last!)
    • 返回 prefixToAdd + s

题解代码分析

import Foundationclass Solution {func shortestPalindrome(_ s: String) -> String {if s.isEmpty { return s }let rev = String(s.reversed())let newStr = s + "#" + revlet lps = computeLPS(newStr)let prefixToAdd = rev.prefix(s.count - lps.last!)return prefixToAdd + s}private func computeLPS(_ s: String) -> [Int] {let chars = Array(s)let n = chars.countvar lps = [Int](repeating: 0, count: n)var length = 0var i = 1while i < n {if chars[i] == chars[length] {length += 1lps[i] = lengthi += 1} else {if length > 0 {length = lps[length - 1]} else {lps[i] = 0i += 1}}}return lps}
}

代码解读

  • computeLPS()
    • 构建 KMP 的 最长前缀后缀匹配表 (LPS)
    • lps[i] 表示 s[0...i] 子串的最长前缀后缀匹配长度。
    • 通过 while 遍历整个字符串,维护 前缀长度 变量 length,高效计算 LPS 数组。
  • shortestPalindrome()
    • 计算 s + "#" + reversed(s) 的 LPS。
    • 计算需要添加的前缀 prefixToAdd,拼接后返回最终结果。

示例测试及结果

let solution = Solution()
print(solution.shortestPalindrome("aacecaaa")) // 输出: "aaacecaaa"
print(solution.shortestPalindrome("abcd"))    // 输出: "dcbabcd"
print(solution.shortestPalindrome("race"))    // 输出: "ecarace"
print(solution.shortestPalindrome("a"))       // 输出: "a"
print(solution.shortestPalindrome(""))        // 输出: ""

测试结果

aaacecaaa
dcbabcd
ecarace
a
""

时间复杂度

  1. 计算 reversed(s):O(n)
  2. 构造 newStr:O(n)
  3. 计算 LPS 数组(KMP 前缀匹配): O(n)
  4. 拼接结果:O(n)

总时间复杂度:O(n)

空间复杂度

  • 额外的 LPS 数组:O(n)
  • 反转字符串 revnewStr 需要额外存储:O(n)

总空间复杂度:O(n)

总结

本篇文章详细介绍了 最短回文串 的求解方案,并使用 KMP 前缀匹配表 (LPS) 优化计算。相较于暴力解法,KMP 方案可以在 O(n) 时间内 找到最优解,是较为高效的方式。

未来展望

  • 优化 LPS 计算:使用更精简的构造方法来降低空间开销。
  • 扩展到回文分割问题:考虑如何最小化字符插入次数,使 s 变为回文。
  • 适用于多种字符集:扩展算法,使其支持 Unicode 字符串。

参考资料

  • Knuth-Morris-Pratt (KMP) Algorithm: https://en.wikipedia.org/wiki/Knuth–Morris–Pratt_algorithm
  • Swift 相关 API 文档: https://developer.apple.com/swift/

文章转载自:

http://XU8m23Mv.ygrkm.cn
http://76uQKx2R.ygrkm.cn
http://yhVVBB7Z.ygrkm.cn
http://d8eZc7tk.ygrkm.cn
http://nVCKOP26.ygrkm.cn
http://kqIEhNW0.ygrkm.cn
http://1xX25wYO.ygrkm.cn
http://nct2cnHZ.ygrkm.cn
http://eZticLKy.ygrkm.cn
http://hRpA27pO.ygrkm.cn
http://FDnBZqIc.ygrkm.cn
http://vs5F3ddh.ygrkm.cn
http://Cc4ulZP1.ygrkm.cn
http://WJ7pAvnm.ygrkm.cn
http://fNfLN1IW.ygrkm.cn
http://4UIIduWQ.ygrkm.cn
http://D2cJlYUf.ygrkm.cn
http://4o9dgBWu.ygrkm.cn
http://Acm2DBBg.ygrkm.cn
http://aHkcVk8B.ygrkm.cn
http://XC5XU8A3.ygrkm.cn
http://xdfjBvya.ygrkm.cn
http://yseffEhb.ygrkm.cn
http://e3ji3PWl.ygrkm.cn
http://80EM9r4s.ygrkm.cn
http://cU0yF5si.ygrkm.cn
http://f03R95Cx.ygrkm.cn
http://LdRSxW3C.ygrkm.cn
http://N9zGCBZh.ygrkm.cn
http://N8zrfhoI.ygrkm.cn
http://www.dtcms.com/wzjs/740511.html

相关文章:

  • 怎么进入网站后台图片广州网站案例展示
  • 网站按抓取手机软件贵阳wordpress我的世界主题
  • 网站制作一个人可以做吗哈尔滨网页设计培训
  • 苏州教育平台网站建设WordPress搭建流媒体网站
  • 如何建设一个简单的公司网站怀化政法网站
  • 个人博客网站制作图片做淘宝网店需要多少钱
  • 大城 网站建设注册公司需要登录的网址
  • 网站组网图自己做网站 做什么好
  • 上传的网站打不开公司组织架构图模板
  • 网站左侧分类导航菜单求生之路2怎么做非官方网站
  • 理财网站方案建设湖南公司网站建设
  • 购买域名搭建网站郑州网络运营培训
  • 价钱网站建设站长工具域名查询
  • 如何做本地网站中国建设银行网站主要功能
  • 腾讯云服务器用什么做网站在线网站制作系统源码
  • 江苏建设厅官方网站人工费wordpress 5.1.1主题
  • 专业手机网站设计网站建设图片大全
  • 做网站移动端建多大尺寸如何搭建局域网服务器
  • 如何自建网站删除wordpress logo
  • 出版社网站建设商城小程序开发多少钱
  • 网站的关于我们怎么做摄影网站cnu视觉联盟
  • 西安专业的网站优化浙江省住房和城乡建设厅成绩查询
  • 网站统计天津seo管理平台
  • 新手学做网站学哪些知识wordpress强大播放器
  • 孝仙洪高速公路建设指挥部网站网站管理助手 伪静态
  • 企业电子商务网站的建设方式深圳网站建设 百度一下
  • 汉字域名的网站普洱做网站的报价
  • 做网站的资源有哪些上海天华建筑设计有限公司合肥分公司
  • 门户网站综合型门户天津网站制作
  • 做网站运营有趣吗济南建设官方网站