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

专业网站建设市场豫建市2021 42号

专业网站建设市场,豫建市2021 42号,4s店网站模板,网站建设硬件环境编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 方法一:横向扫描 横向扫描的思路是先假设第一个字符串为最长公共前缀,然后依次与后面的字符串进行比较,不断更新最长公共前缀…

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

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

 

方法一:横向扫描

横向扫描的思路是先假设第一个字符串为最长公共前缀,然后依次与后面的字符串进行比较,不断更新最长公共前缀,直到遍历完所有字符串。

function longestCommonPrefix(strs: string[]): string {if (strs.length === 0) return "";let prefix = strs[0];for (let i = 1; i < strs.length; i++) {while (strs[i].indexOf(prefix)!== 0) {prefix = prefix.slice(0, prefix.length - 1);if (prefix === "") return "";}}return prefix;
}// 示例调用
const strs = ["flower", "flow", "flight"];
const prefix = longestCommonPrefix(strs);
console.log("最长公共前缀是:", prefix);
复杂度分析
  • 时间复杂度:O(mn),其中 m  是字符串数组中所有字符串的平均长度,n 是字符串的数量。最坏情况下,需要将第一个字符串与后面的所有字符串进行比较。
  • 空间复杂度:O(1),只使用了常数级的额外空间。

方法二:纵向扫描

纵向扫描的思路是从所有字符串的第一个字符开始,依次比较相同位置的字符是否相同,如果相同则继续比较下一个位置,直到出现不同字符或者到达某个字符串的末尾。

function longestCommonPrefix(strs: string[]): string {if (strs.length === 0) return "";for (let i = 0; i < strs[0].length; i++) {const char = strs[0][i];for (let j = 1; j < strs.length; j++) {if (i === strs[j].length || strs[j][i]!== char) {return strs[0].slice(0, i);}}}return strs[0];
}// 示例调用
const strs2 = ["dog", "racecar", "car"];
const prefix2 = longestCommonPrefix(strs2);
console.log("最长公共前缀是:", prefix2);
复杂度分析
  • 时间复杂度:O(mn),其中  m 是字符串数组中所有字符串的平均长度,n 是字符串的数量。需要遍历所有字符串的每个字符。
  • 空间复杂度:O(1),只使用了常数级的额外空间。

方法三:分治法

分治法的思路是将字符串数组分成两部分,分别求出两部分的最长公共前缀,然后再求这两个最长公共前缀的公共前缀。

function longestCommonPrefix(strs: string[]): string {if (strs.length === 0) return "";return divideAndConquer(strs, 0, strs.length - 1);
}function divideAndConquer(strs: string[], left: number, right: number): string {if (left === right) {return strs[left];}const mid = Math.floor((left + right) / 2);const lcpLeft = divideAndConquer(strs, left, mid);const lcpRight = divideAndConquer(strs, mid + 1, right);return commonPrefix(lcpLeft, lcpRight);
}function commonPrefix(str1: string, str2: string): string {const minLength = Math.min(str1.length, str2.length);for (let i = 0; i < minLength; i++) {if (str1[i]!== str2[i]) {return str1.slice(0, i);}}return str1.slice(0, minLength);
}// 示例调用
const strs3 = ["interspecies", "interstellar", "interstate"];
const prefix3 = longestCommonPrefix(strs3);
console.log("最长公共前缀是:", prefix3);
复杂度分析
  • 时间复杂度:O(mn),其中 m  是字符串数组中所有字符串的平均长度,n 是字符串的数量。分治法的递归过程中,每个字符都会被比较一次。
  • 空间复杂度:O(mlog),主要是递归调用栈的空间开销,递归的深度为 ,每层递归需要 m  的额外空间。

综上所述,横向扫描和纵向扫描的实现相对简单,而分治法在处理大规模数据时可能会有更好的性能表现。

http://www.dtcms.com/a/524311.html

相关文章:

  • 自己做的网站不满屏单纯做网站的公司
  • 在本地部署LangManus
  • wordpress 网站投票网站使用特殊字体
  • 视觉Transformer实战 | Transformer详解与实现
  • 032:vue+threejs 实现物体点击后在地面上拖动平移,点击地面可旋转
  • Java 中数组和集合的遍历方式
  • 网站建设评估及分析wordpress 视频 批量
  • 自己开发网站需要什么技术青海网站建设与维护
  • sqli-labs第二关
  • 大数据Spark(七十):Transformation转换算子cogroup和zip使用案例
  • Drools在java中的使用
  • 【办公类-121-02】20251024淘宝视频红包(UIBOT点击“左箭头”“视频”“消息”切换)
  • 9 种高级 RAG 技术及其实现方法
  • 计算机网络面试核心知识点大全
  • 做网站建站现在什么传奇最火电脑版
  • C语言需要掌握的基础知识点之图
  • 做一个类似京东的网站海外注册公司
  • python舆情分析可视化系统 情感分析 微博 爬虫 scrapy爬虫技术 朴素贝叶斯分类算法大数据 计算机✅
  • 压缩与缓存调优实战指南:从0到1根治性能瓶颈(六)
  • 做百度手机网站优化点asp网站制作教程
  • element+vue3 table上下左右键切换input和select
  • 元萝卜 1.0.27| 免Root,XP模块框架,支持应用多开分身,一键微信平板模式
  • 长春企业网站seo珠海企业官网设计制作
  • MySQL 函数详细说明
  • 《Memcached 连接:深入理解与优化实践》
  • C++ EigenSolver无优化模式下报错分析
  • 数据结构——折半插入排序
  • io_uring 快吗? Postgres 17 与 18 的基准测试
  • 国产数据库替代MongoDB:政务电子证照新选择
  • 甘孜建设网站集团响应式网站建设