最长公共前缀[简单]
优质博文:IT-BLOG-CN
一、题目
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:fl
示例 2:
输入:strs = ["dog","racecar","car"]
输出:“”
解释:输入不存在公共前缀。
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]仅由小写英文字母组成
二、代码
【1】横向比较: 依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀prex,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。
class Solution {public String longestCommonPrefix(String[] strs) {// 思想:横向比较,数组中的数组暴力比较if (strs == null || strs.length == 0) {return "";}// 获取第一个元素作为基础数据进行比较,如果有比它更短的数据,可以return退出循环String prex = strs[0];for (int i = 1; i < strs.length; i++) {// 获取最小的长度int len = Math.min(prex.length(), strs[i].length());// 创建一个递增的下标int index = 0;while (index < len) {if (prex.charAt(index) != strs[i].charAt(index)) {break;}index++;}// 如果前缀是0可以直接退出if (index == 0) {return "";}prex = prex.substring(0,index);}return prex;}
}
时间复杂度: O(mn)其中m是字符串数组中的字符串的平均长度,n是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
空间复杂度: O(1)使用的额外空间复杂度为常数。
【2】纵向比较: 横向比较,依次遍历每个字符串,更新最长公共前缀。另一种方法是纵向比较。纵向扫描时,从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。直接返回即可。
class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) {return "";}// 思想:纵向比较:以strs[0]作为比较基本,循环依次取Char与其它元素进行比较,不相同直接退出即可。String prex = strs[0];for (int i = 0; i < prex.length(); i++) {// 获取比较的元素char p = prex.charAt(i);// 遍历其它元素,但是其它元素可能并没有第一个元素长,可以先比较长度for (int j = 1; j < strs.length; j++) {if (i == strs[j].length() || strs[j].charAt(i) != p) {return prex.substring(0,i);}}}return prex;}
}
时间复杂度: O(mn)其中m是字符串数组中的字符串的平均长度,n是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
空间复杂度: O(1)使用的额外空间复杂度为常数。
【3】分治思想: 使用归并排序的思想,先将strs拆分成个体,在通过治的思想,将相邻元素进行合并处理。
class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) {return "";}// 思想:采用分治思想,先将strs拆分为一个个单体,在进行两两合并比较即可return partition(strs, 0, strs.length - 1);}// 拆分方法public String partition(String[] strs, int start, int end) {// 递归退出条件if (start == end) {return strs[start];}int mid = (end - start) / 2 + start;String left = partition(strs, start, mid);String right = partition(strs, mid + 1, end);// 合并return merge(left, right);} // 合并方法public String merge(String left, String right) {int minLen = Math.min(left.length(), right.length());for (int i = 0; i < minLen; i++) {if (left.charAt(i) != right.charAt(i)) {return left.substring(0,i);}}return left.substring(0, minLen);}
}
时间复杂度: O(mn)其中m是字符串数组中的字符串的平均长度,n是字符串的数量。时间复杂度的递推式是T(n)=2⋅T(n/2)+O(m),通过计算可得T(n)=O(mn)。
空间复杂度: O(mlogn),其中m是字符串数组中的字符串的平均长度,n是字符串的数量。空间复杂度主要取决于递归调用的层数,层数最大为logn,每层需要m的空间存储返回结果。
【4】二分查找法: 最长公共前缀的长度不会超过字符串数组中的最短字符串的长度。用minLen表示字符串数组中的最短字符串的长度,则可以在[0,minLength]的范围内通过二分查找得到最长公共前缀的长度。每次取查找范围的中间值mid,判断每个字符串的长度为mid的前缀是否相同,如果相同则最长公共前缀的长度一定大于或等于mid,如果不相同则最长公共前缀的长度一定小于mid,通过上述方式将查找范围缩小一半,直到得到最长公共前缀的长度。
class Solution {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) {return "";}int minLength = Integer.MAX_VALUE;for (String str : strs) {minLength = Math.min(minLength, str.length());}int low = 0, high = minLength;while (low < high) {int mid = (high - low + 1) / 2 + low;if (isCommonPrefix(strs, mid)) {low = mid;} else {high = mid - 1;}}return strs[0].substring(0, low);}public boolean isCommonPrefix(String[] strs, int length) {String str0 = strs[0].substring(0, length);int count = strs.length;for (int i = 1; i < count; i++) {String str = strs[i];for (int j = 0; j < length; j++) {if (str0.charAt(j) != str.charAt(j)) {return false;}}}return true;}
}
时间复杂度: O(mnlogm),其中m是字符串数组中的字符串的最小长度,n是字符串的数量。二分查找的迭代执行次数是O(logm),每次迭代最多需要比较mn个字符,因此总时间复杂度是O(mnlogm)。
空间复杂度: O(1)。使用的额外空间复杂度为常数。
相关文章:
最长公共前缀[简单]
优质博文:IT-BLOG-CN 一、题目 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。 示例 1: 输入:strs ["flower","flow","flight"] 输出…...
Java后端开发(十一)-- Mysql8的详细安装与环境配置
目录 1. mysql数据库下载 官网在线下载 2. 下载 MySQL的安装包 3. 安装MySQL...
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
🧸欢迎来到dream_ready的博客,📜相信您对这几篇博客也感兴趣o (ˉ▽ˉ;) 📜什么是SpringMVC?简单好理解!什么是应用分层?SpringMVC与应用分层的关系? 什么是三层架构&…...
PyTorch 从tensor.grad 看 backward(权重参数) 和 gradient accumulated
1. 新建一个自变量 tensor x import torchx torch.ones(1, requires_gradTrue) print(x)1. 输出: tensor([1.], requires_gradTrue)2. 写一个 forward import torchx torch.ones(1, requires_gradTrue) y x**2 z x**33. y, z 都 backward import torchx to…...
fedora 命令行代理proxychains 使用flatpak下载 flathub包
feodra 28 有 tsocks - (rpm 包)工具, 后面就没有了. 不过还有替代工具 proxychains 当前操作环境 Fedora 38 proxychains 配置文件所在位置 # 全局配置 /etc/proxychains.confproxychains looks for configuration in the following order: SOCKS5 proxy port in environme…...
介绍kamailio的dialog模块
# 介绍kamailio的dialog模块 kamailio的dialog模块一般有四个作用: - 读写对话变量 - 跟uac模块配合,完成uac trunk auth功能 - 统计early_dialogs和active_dialogs等 - 利用dialog profile实现分类统计功能或者实现呼叫限制功能 dialog模块的参数可以…...
性能优于BERT的FLAIR:一篇文章入门Flair模型
文章目录 What is FLAIR?FLAIR ModelContextual String Embedding for Sequence Labelingexample FLAIR Application AreaSentiment AnalysisNamed Entity RecognitionText Classification FLAIR一、什么是FLAIR?二、FLAIR Library的优势是什么ÿ…...
Weblogic ssrf漏洞复现
文章目录 一、漏洞描述二、漏洞特征1.查看uddiexplorer应用2.漏洞点 三、漏洞复现1.获取容器内网ip2.VULHUB Weblogic SSRF漏洞 docker中 centos6 无法启动的解决办法3.准备payload4.反弹shell 一、漏洞描述 SSRF 服务端请求伪造(Server-Side Request Forgery),是一种由攻击者…...
Memcached构建缓存服务器
Memcache介绍 1、特点 内置存储方式----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失 简单key/value存储--------------服务器不关心数据本身的意义及结构&…...
vue3+element Plus实现弹框的拖拽、可点击底层页面功能
1、template部分 <el-dialog:modal"false"v-model"dialogVisible"title""width"30%"draggable:close-on-click-modal"false"class"message-dialog"> </el-dialog> 必须加的属性 modal:是否去掉遮罩层…...
Vue+elementui 纯前端实现Excel导入导出功能(区分表头标题)
引入插件 import * as XLSX from "xlsx/xlsx.mjs"; import { read, utils } from xlsx/xlsx.mjs; 上传文件方法 // 上传文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用async handle(ev) {//改变表格key值this.$refs.cpkTable.loading…...
使用Scrapy的调试工具和日志系统定位并解决爬虫问题
目录 摘要 一、Scrapy简介 二、Scrapy的调试工具 1、Shell调试工具 2、断点调试 三、Scrapy的日志系统 四、实例解析 1、启用详细日志 2、断点调试 3、分析日志 4、解决问题 五、代码示例 总结 摘要 本文详细介绍了如何使用Scrapy的调试工具和日志系统来定位并解…...
Pycharm安装配置Pyqt5教程(保姆级)
目录 一、前言 1、依赖包 2、工具 二、安装依赖包 三、配置环境 四、配置设计工具 1、Qt Designer 2、PyRcc 3、PyUIC 五、使用 1、界面设计 2、ui文件转化为py文件 一、前言 很多情况下需要为程序设计一个GUI界面,在Python中使用较多的用户界面设计工具…...
基于单片机的养殖场温度控制系统设计
博主主页:单片机辅导设计 博主简介:专注单片机技术领域和毕业设计项目。 主要内容:毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、控制系统设计二、系统方案设计2.1 系统运行方案设计2.1.1 羊舍环境温度的确定 三、 系统仿…...
时序分解 | Matlab实现EMD经验模态分解时间序列信号分解
时序分解 | Matlab实现EMD经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现EMD经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现EMD经验模态分解时间序列信号分解 Matlab语言 算法新颖小众,用的人很少…...
解决无法进入MERCURY路由器管理界面的问题 水星网络路由器
问题:今天家里停电了,来电过后,路由器有信号,但是手机连上WiFi后无法正常上网。尝试过给路由器断电开电,拔插网线。试了这两种方法后手机依然无法正常上网。最后想到了重启路由器,也就是将路由器恢复出厂设…...
Ansible自动化安装部署及使用
目录 前言 一、环境概况 修改主机名(可选项) 二、安装部署 1.安装epel扩展源 2.安装Ansible 3.修改Ansible的hosts文件 4.生成密钥 三、Ansible模块使用介绍 Command模块 Shell模块 User模块 Copy模块 File模块 Hostname模块 Yum模块 Ser…...
idea中配置spring boot单项目多端口启动
参照文章 https://zhuanlan.zhihu.com/p/610767685 项目配置如下 下面为 idea 2023,不同版本的设置有区别,但是没那么大,idea 2023默认使用新布局,切换为经典布局即可。 在项目根目录的.idea/workspace.xml文件里添加如下配置 &l…...
MP4视频文件损坏怎么修复?
3-2 作为摄影师,或者在平时有拍摄工作的事情的,比如搞婚庆、搞航拍什么的,有一定的概率会遇到损坏的视频文件,比如相机突然断电、无人机炸机等,有可能会导致保存的MP4文件损坏。 这种文件使用播放器播放的话…...
使用electron ipcRenderer接收通信消息多次触发
使用electron ipcRenderer接收通信消息多次触发 在使用electron ipcRenderer.on接收ipcRenderer.send的返回值时,ipcRenderer.send发送一次信息, ipcRenderer.on会打印多个日志, renderer.once(get-file-path, (event: any, paths: any) &g…...
实战指南:基于快马平台为openclaw社区开发精华帖子系统
实战指南:基于快马平台为openclaw社区开发精华帖子系统 最近在帮openclaw中文社区官方开发一个精华帖子评选与展示系统,整个过程让我深刻体会到如何用InsCode(快马)平台快速实现生产级功能。这个系统需要满足社区对优质内容筛选和展示的核心需求&#x…...
Node.js 沙箱库 vm2 曝高危沙箱逃逸漏洞(CVE-2026-22709)
近日,热门 Node.js 沙箱库 vm2 被披露一个高危漏洞(CVE-2026-22709,CVSS 评分 9.8,Critical)。攻击者可利用该漏洞轻松突破沙箱限制,在底层主机系统上执行任意代码(RCE)。 vm2 是一…...
手把手教你拆解Coze‘城市觉醒’工作流:从提示词工程到插件调用的保姆级避坑指南
深度拆解Coze“城市觉醒”工作流:从提示词优化到插件调用的高阶实践 清晨五点的城市天际线逐渐亮起,高楼的轮廓在晨雾中若隐若现——这种充满电影感的画面,过去需要专业团队耗费数周时间拍摄剪辑。如今,借助Coze平台的工作流能力&…...
用CodeBuddy在10分钟内搭建个人技术博客(含GitHub Pages部署教程)
用CodeBuddy在10分钟内搭建个人技术博客(含GitHub Pages部署教程) 在数字时代,拥有一个个人技术博客已成为开发者展示专业能力、分享技术见解的重要方式。本文将带你使用CodeBuddy这一智能编程助手,快速构建专业级技术博客&#x…...
ai辅助开发:为openclawskills网站打造智能个性化教程推荐引擎
最近在帮朋友优化他的技能学习网站openclawskills,想给用户增加个性化推荐功能。作为一个独立开发者,借助InsCode(快马)平台的AI辅助开发能力,整个过程比想象中顺利很多。记录下这个智能推荐系统的实现思路,或许对其他想做类似功能…...
Xinference下载模型卡住不动?从0%到100%的完整排坑指南
写在前面最近在使用Xinference部署模型时,遇到了一个让人抓狂的问题:无论WebUI还是命令行,模型下载的进度始终卡在0%不动,多次重试后还是没变化。更诡异的是,服务日志显示一切正常,但是就是下载不了。经过一…...
深度解析Godot资源提取:构建专业级解包方案
深度解析Godot资源提取:构建专业级解包方案 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 在游戏开发与逆向工程领域,Godot资源提取技术已成为开发者探索游戏内部结构的核心…...
Kandinsky-5.0-I2V-Lite-5s部署案例:中小企业用其替代高价视频外包,降本70%
Kandinsky-5.0-I2V-Lite-5s部署案例:中小企业用其替代高价视频外包,降本70% 1. 为什么中小企业需要关注这个方案 对于中小企业来说,视频制作一直是个头疼的问题。传统外包制作5秒短视频的平均成本在2000-5000元不等,而使用Kandi…...
3步掌握Dify工作流:从零到精通的完整指南
3步掌握Dify工作流:从零到精通的完整指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Workflow …...
5个强力解决方案:XUnity.AutoTranslator实现Unity游戏翻译与多语言支持
5个强力解决方案:XUnity.AutoTranslator实现Unity游戏翻译与多语言支持 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator Unity游戏翻译是全球化游戏开发与玩家体验优化的关键环节,而…...
