算法题-求字符串数组中的最长公共前缀

1.编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串"" 。 示例:输入[“flower”,“flow”,“flight”]输出"fl"

在Java中,你可以通过水平扫描(Horizontal Scanning)或者垂直扫描(Vertical Scanning)的方式来解决这个问题。水平扫描是从左到右检查每个字符是否相同,而垂直扫描是首先获取所有字符串的最小长度,然后从第一个字符串开始,逐个字符地与其他字符串进行比较。

水平扫描方案

public class LongestCommonPrefix {public String longestCommonPrefix(String[] strs) {if (strs == null || strs.length == 0) {return "";}// 获取第一个字符串作为公共前缀的起始点String prefix = strs[0];// 遍历剩余字符串,逐个字符与当前公共前缀进行比较for (int i = 1; i < strs.length; i++) {// 如果当前字符串为空,则公共前缀必然为空if (strs[i].isEmpty()) {return "";}// 使用两个指针,分别指向当前字符串和公共前缀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;}public static void main(String[] args) {LongestCommonPrefix solution = new LongestCommonPrefix();String[] strs = {"flower", "flow", "flight"};String result = solution.longestCommonPrefix(strs);System.out.println(result); // 输出: fl}
}

在这个解决方案中,我们首先检查数组是否为空或没有元素,如果是,我们直接返回空字符串。然后,我们获取数组中的第一个字符串作为公共前缀的起始点。接下来,我们遍历数组中的剩余字符串,并逐个字符地与当前公共前缀进行比较。如果当前字符不同或者某个字符串已经遍历完了,我们就更新公共前缀并继续下一个字符串的比较。最后,我们返回得到的公共前缀。

垂直扫描方案

垂直扫描法通常是通过比较所有字符串在同一位置上的字符来实现的。如果某个位置上所有字符串的字符都相同,那么该字符就是公共前缀的一部分;如果某个位置上的字符不完全相同,则停止比较,并将当前位置之前的所有字符作为最长公共前缀。

以下是用Java实现的垂直扫描法:

public class LongestCommonPrefix {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());}StringBuilder prefix = new StringBuilder();// 遍历每个字符的位置for (int i = 0; i < minLength; i++) {// 假设当前位置的字符是公共前缀的一部分char currentChar = strs[0].charAt(i);// 检查剩余字符串在同一位置上的字符是否相同for (int j = 1; j < strs.length; j++) {if (i >= strs[j].length() || strs[j].charAt(i) != currentChar) {// 如果有任何不同,返回当前已构建的公共前缀return prefix.toString();}}// 所有字符串在同一位置上的字符都相同,添加到公共前缀中prefix.append(currentChar);}// 如果所有字符串都已经遍历完,返回完整的公共前缀return prefix.toString();}public static void main(String[] args) {LongestCommonPrefix solution = new LongestCommonPrefix();String[] strs = {"flower", "flow", "flight"};String result = solution.longestCommonPrefix(strs);System.out.println(result); // 输出: fl}
}

在这个解决方案中,我们首先找到字符串数组中最短的字符串长度,这样可以避免在遍历过程中访问超出字符串边界的字符。然后,我们使用一个StringBuilder来构建公共前缀。我们遍历从0开始到最短字符串长度减1的每个位置,并检查所有字符串在该位置上的字符是否相同。如果有任何不同,我们就返回当前已经构建的公共前缀;如果都相同,我们就将该字符添加到公共前缀中。最后,如果所有字符串都已经遍历完,我们就返回完整的公共前缀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS选择器、字体文本属性、三大特性、盒子模型等

目录 导入css简介HTML的局限性CSS-网页美化CSS语法规范CSS代码风格 选择器基础选择器复合选择器 CSS字体属性字体系列字体大小字体粗细文字样式字体复合属性 CSS文本属性文本颜色对齐文本装饰文本文本缩进行间距(即行高) CSS的引入方式emmet语法元素显示模式什么是&#xff1f;…

Python将Json转为对象

1、Json简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种用于数据交换的轻量级文本格式&#xff0c;易于人们阅读和编写&#xff0c;也易于机器解析和生成。它基于JavaScript的一个子集&#xff0c;但它的语法独立于编程语言。 JSON被广泛应用于前后端数据…

vue Props

Props 声明​ 一个组件需要显式声明它所接受的 props&#xff0c;这样 Vue 才能知道外部传入的哪些是 props&#xff0c;哪些是透传 attribute 在使用 <script setup> 的单文件组件中&#xff0c;props 可以使用 defineProps() 宏来声明&#xff1a; <script setup…

python:dict(字典、映射)使用解析

列表使用&#xff1a;[] 元组使用&#xff1a;() 字符串使用&#xff1a;"" 集合使用&#xff1a;{} 字典&#xff1a;{key:value} 生活中的字典&#xff1a;记录大量的字与含义&#xff1b; python中的字典&#xff1a;通过key去找到对应的value;[key]:value …

Vue 工程化开发入门

Vue开发的两种方式&#xff1a; 核心包传统开发模式&#xff1a;基于html/css/js文件&#xff0c;直接引入核心包&#xff0c;开发Vue工程化开发模式&#xff1a;基于构建工具的环境中开发Vue 这里选择Vue cli脚手架 进行开发&#xff0c;搜索教程自行下载。 组件化开发 一个页…

STM32入门学习之ADC

1.ADC在STM32进行数据采集时十分重要。通过ADC可以将外界的数字信号转换为模拟信号&#xff0c;以满足采样的需求。(资料参考于正点原子) STM32 拥有 1~3 个 ADC &#xff08; STM32F101/102 系列只有 1 个 ADC &#xff09;&#xff0c;这些 ADC 可以独立使用&#…

苍穹外卖,接入redis cache后,新增套餐有问题

终端报错&#xff1a; java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public com.sky.result.Result com.sky.controller.admin.SetmealController.save(com.sky.d…

vue3 双向绑定:如何在自定义组件中修改props定义的属性值,并更新父组件绑定的响应式变量值

1、自定义支持双向绑定的prop 在子组件中声明一个 count prop&#xff0c;通过触发 update:count 事件更新父组件值 子组件示例代码&#xff1a; <template><div><div>[子组件] count: {{ count }}</div><button click"onClick">1&…

虚拟机网络实现桥接模式

虚拟机网络实现桥接模式 虚拟化软件&#xff1a;VMware 17 Linux&#xff1a;rocky8_9 主机&#xff1a;Win10 文章目录 虚拟机网络实现桥接模式1. 桥接模式介绍2. 查看Win本机的网络信息&#xff08;以笔记本电脑以WiFi联网为例&#x…

保姆级教程申请地理位置接口都给我去试

小程序地理位置接口有什么功能&#xff1f; 目前小程序的地理位置接口已经调整为审核制了&#xff0c;也就是说我们开发者如果小程序需要用到getlocation等接口的话&#xff0c;需要先在小程序后台进行开通申请&#xff0c;提交相关证明材料才可以获得接口使用权限。 小程序地理…

Fourier 测试时间自适应与多级一致性用于鲁棒分类

文章目录 Fourier Test-Time Adaptation with Multi-level Consistency for Robust Classification摘要方法实验结果 Fourier Test-Time Adaptation with Multi-level Consistency for Robust Classification 摘要 该研究提出了一种名为 Fourier 测试时间适应&#xff08;FTT…

汽车车灯的材料是什么?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车车灯的材料主要包括灯罩和灯底座两部分&#xff0c;它们所使用的材料各不相同。 车灯罩的材料主要是透明且具有良好耐热性和耐紫外线性能的塑料。其中&#xff0c;聚碳酸酯&#xff08;PC&#xff09;是一种常用的材料&#xff0c;它具有高抗冲击性、耐化学品腐蚀和优良的…

大数据BI可视化(Echarts组件)项目开发-熟悉结合Vue开发图表组件7.0附带1/6商家销售统计(横向柱状图)

一.创建项目 创建 1.npm install -g vue/cli vue create vision 2. 3. 4.版本 5.是否使用历史路由 6.CSS预处理 7.ES标准配置 8.啥时候es标准提示-保存文件后 9.将配置文件放入单独文件中处理 10.需要保留新建项目以上设置 11.选择“Use PNPM”或者“Use NPM” 12.创建 13访…

五一假期零碎时间练习学习过的内容(商城版)

目录 1 总览1.1 技术架构1.2 其他1.2.1 数据库1.2.2 后端部分1.2.2.1 复习feign1.2.2.2 复习下网关网关的核心功能特性&#xff1a;网关路由的流程断言工厂过滤器工厂全局过滤器 过滤器执行顺序解决跨域问题 1.2.2.3 es部分复习 1.2.3 前端部分 2 day1 配置网关2.1 任务2.2 网关…

RT-Thread互斥量

文章目录 前言一、RT-Thread互斥量的概念二、互斥量和信号量的区别三、互斥量的函数使用1.创建互斥量2.删除互斥量3.获取互斥量4.释放互斥量 四、互斥量的基本使用五、FreeRTOS中互斥量和RT-Thread互斥量的区别总结 前言 本篇文章将为大家讲解RT-Thread中的互斥量概念和使用方…

【4088】基于小程序实现的二手物品交易系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

pandas学习笔记11

DataFrame结构 DataFrame 一个表格型的数据结构&#xff0c;既有行标签&#xff08;index&#xff09;&#xff0c;又有列标签&#xff08;columns&#xff09;&#xff0c;它也被称异构数据表&#xff0c;所谓异构&#xff0c;指的是表格中每列的数据类型可以不同&#xff0c;…

目标检测算法YOLOv5简介

没有关于YOLOv5的直接论文&#xff0c;YOLOv5由Ultralytics维护&#xff0c;源码见&#xff1a;https://github.com/ultralytics/yolov5 &#xff0c;于2020年6月发布v1.0版本&#xff0c;最新发布版本为v7.0&#xff0c;License为AGPL-3.0. 以下内容主要来自&#xff1a; 1. U…

2024.4.29 Pandas day01 基础语法

pandas是python的一个数据库&#xff0c;在使用数据库的时候需要输入 import pandas as pd 引入&#xff0c; df pd.read.csv(文件路径“&#xff09;&#xff1a;这是利用pandas数据库读取CSV文件的方法&#xff0c;如果读取EXCEL文件或者其他文件&#xff0c;csv文件换成其他…

库存管理系统开源啦

软件介绍 ModernWMS是一个针对小型物流仓储供应链流程的开源库存管理系统。该系统的开发初衷是为了满足中小型企业在有限IT预算下对仓储管理的需求。通过总结多年ERP系统研发经验&#xff0c;项目团队开发了这套适用于中小型企业的系统&#xff0c;以帮助那些有特定需求的用户。…