探秘力扣之谜:如何轻松解决最长公共前缀问题?

news2024/9/23 12:39:51

在这里插入图片描述

本篇博客我会讲解力扣中的“14. 最长公共前缀”这道题,这是题目链接。

先来审题:
在这里插入图片描述
以下是几个输出示例:
在这里插入图片描述
提示:
在这里插入图片描述
这道题的思路其实并不难,也是一些字符串的常规操作的结合。大家可以先思考一下,再来听我讲解。

思路是这样的:外层循环遍历第一个字符串的每一个字符,内层循环遍历其他字符串对应位置的字符,直到遍历到不匹配的字符,或者全部匹配。

如何遍历第一个字符串呢?常规思路是这样的:

for (char* cp = str[0]; *cp; ++cp)
{
	// ...
}

但是这么写有一个问题:你怎么知道遍历的是第一个字符串中的第几个字符?如果不知道的话,就无法匹配其他字符串相同位置的字符了。

所以,最好用下标来遍历。你可以这么写:

int len = strlen(strs[0]);
for (int i = 0; i < len; ++i)
{
	// ...
}

但这么写需要先求字符串的长度,我不太喜欢。我更喜欢这么写:

for (int i = 0; strs[0][i]; ++i)
{
	// ...
}

这种写法和第一种写法中的cp指针遍历有着异曲同工之妙,都是遍历到’\0’就停止遍历。

内层循环应该遍历每一个字符串,这就是遍历数组的常规操作。

char * longestCommonPrefix(char ** strs, int strsSize){
    // 遍历第一个字符串
    for (int i = 0; strs[0][i]; ++i)
    {
    	// 遍历字符串数组
        for (int j = 0; j < strsSize; ++j)
        {
            
        }
    }
}

下面检查每个字符串对应位置的字符是否和第一个字符串对应位置的字符相同,如果相同,就继续遍历;如果不相同,则遍历结束,返回该位置之前的前缀。当然,如果2层for循环都走完了,就说明所有的字符串都是相同的,返回第一个字符串即可。

char * longestCommonPrefix(char ** strs, int strsSize){
    // 遍历第一个字符串
    for (int i = 0; strs[0][i]; ++i)
    {
        // 遍历字符串数组
        for (int j = 0; j < strsSize; ++j)
        {
            if (strs[j][i] != strs[0][i])
            {
                // 遍历结束
                strs[0][i] = '\0';
                return strs[0];
            }
        }
    }

	// 所有字符串均相同
    return strs[0];
}

在这里插入图片描述
这就通过了。是不是很简单?

总结

  1. 遍历字符串,除了用cp指针遍历,还可以用下标遍历。
  2. 返回字符串前缀,可以把前缀的下一个字符改成’\0’,再返回起始地址。

感谢大家的阅读!

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

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

相关文章

TCP和UDP数据报文详解(区别及三次握手四次挥手详解)

总结TCP和UDP详解在后文 相同点&#xff1a; 1.都是传输层协议 2.都是全双工通信 区别&#xff1a; TCPUDP面向连接无连接一对一一对一&#xff0c;一对多&#xff0c;多对多&#xff0c;多对一(单播&#xff0c;多播&#xff0c;广播)可靠不保证可靠交付面向字节流面向报…

java变量与方法

方法 构造方法 定义&#xff1a;构造方法是一个特殊的成员方法&#xff0c;名字必须与类相同&#xff0c;在创建对象时由编译器自动调用&#xff0c;并且在生命周期内只调用一次 演示&#xff1a; 特性&#xff1a; 1.构造方法名字必须与类名相同&#xff08;如果不同&#…

Ajax XML

文章目录 AJAX XML 实例AJAX XML 实例实例解析 loadXMLDoc() 函数AJAX 服务器页面 AJAX XML 实例 AJAX 可用来与 XML 文件进行交互式通信。 AJAX XML 实例 下面的例子将演示网页如何使用 AJAX 来读取来自 XML 文件的信息&#xff1a; 代码部分 <!DOCTYPE html> <h…

Oracle—数据恢复

文档结构 1、恢复原理1.1、recyclebin&#xff08;回收站&#xff09;相关操作 2、恢复场景2.1、定义删除2.2、记录删除2.2.1、undo恢复2.2.2、redo恢复2.2.3、dbms_logmnr 场景&#xff1a;在 Oracle数据库使用过程中&#xff0c;误删对象或误删记录的情况时有发生&#xff1b…

07- 算法解读 Faster_R-CNN (目标检测)

要点&#xff1a; Faster_R-CNN RPN Fast R-CNN GitHub地址&#xff1a;vision/torchvision/models/detection at main pytorch/vision GitHub 三 Faster_R-CNN Faster R-CNN 是作者 Ross Girshick 继 Fast R-CNN 后的又一力作。同样使用 VGG16 作为网络的 backbone &am…

Windows 10 安装安卓子系统 WSA(Magisk/KernelSU)使用 WSA 工具箱安装 APK

from https://blog.zhjh.top/archives/XokySA7Rc1pkVvnxAEP5E 前提是系统为 Windows 10 22H2 10.0.19045.2311 或更高版本&#xff0c;尽量新。 步骤 使用 WSAPatch 和 MagiskOnWSALocal 安装 WSA 在 Microsoft Store 中安装 Ubuntu LTS&#xff08;或你喜欢的发行版&#xf…

Linux的进程

目录 一、进程占用的内存资源 二、进程的系统环境 三、进程一直在切换 四、父进程和子进程 五、进程状态 六、查看进程 1.ps -ef 列出所有进程 2.ps -lax 列出所有进程 3.ps aux列出所有进程 4.树形列出所有进程 七、作业&#xff08;用来查看管理进程&#xff09; …

windows环境安装运行kafka

一、配置java环境变量 1、下载安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2、添加系统变量&#xff1a;JAVA_HOMED:\Program Files (x86)\Java\jdk1.8.0_144 二、安装zooKeeper 1、 下载安装包 http://zookeeper.apache.…

【Java笔试强训 34】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;收件人列…

eks实践案例

Eks&#xff1a; ami-0c23197c88296c1b5 eks集群&#xff1a; 拉面 - 知乎 https://blog.csdn.net/saynaihe/category_12204222.html 什么是 Amazon EKS&#xff1f; - Amazon EKS kubectl 使用指南 https://zhuanlan.zhihu.com/p/364994610 k8s HPA自动伸缩 手把手教你 K8…

centOS7忘记登录密码该如何重新修改登录密码

文章目录 前言一、重新修改登录密码1.1、第一步1.2、第二步1.3、第三步1.4、第四步1.5、第五步1.6、第六步1.7、第七步1.8、第八步 前言 忘记密码并不可怕&#xff0c;只要学会方法&#xff0c;密码随时都可以找回。 一、重新修改登录密码 1.1、第一步 当打开centOS7之后忘记…

flutter系列之:做一个修改组件属性的动画

文章目录 简介flutter中的动画widgetAnimatedContainers使用举例总结 简介 什么是动画呢&#xff1f;动画实际上就是不同的图片连续起来形成的。flutter为我们提供了一个AnimationController来对动画进行详尽的控制&#xff0c;不过直接是用AnimationController是比较复杂的&a…

Colab使用教程(自己胡乱弄了半天,发现不行,还是得学一下)

文章目录 在google云盘中创建笔记本&#xff0c;并红设置笔记本的运行环境常见设置挂载云硬盘更改工作目录移动训练数据防止断链设置方法一、控制台设置方法二、安装Colab Alive 训练结果保存到硬盘中相关链接 在google云盘中创建笔记本&#xff0c;并红 云盘链接&#xff0c;…

K公司项目文件管理系统的分析与设计_kaic

摘 要 2020年的新冠疫情促进了线上办公市场的发展&#xff0c;加快了企业进入全面数字化时代的脚步。办公自动化是当今的大趋势&#xff0c;越来越多的企业采用电子文档的形式存储内外部资料。K公司是一家致力于为政府和企业提供数据安全服务的小型B2B企业&#xff0c;公司承…

Nessus 10.5 Auto Install for macOS Ventura(自动化安装 Nessus 试用版)

发布 Nessus 试用版自动化安装程序&#xff0c;支持 macOS Ventura、RHEL 9 和 Ubuntu 22.04 请访问原文链接&#xff1a;https://sysin.org/blog/nessus-auto-install-for-macos/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

STM32输入捕获之快速构建频率计

简介&#xff1a;配置好STM32 CUBE IDE后只需要额外7行代码就可以构建一个频率计&#xff0c;目前只计算测频&#xff0c;占空比测量需要加入下降沿捕获标记&#xff08;暂时没做&#xff09;。 一、原理 频率&#xff1a;单位时间内完成周期性变化的次数&#xff0c;f 1/T。…

如何裁剪图片大小尺寸?

如何裁剪图片大小尺寸&#xff1f;平时我们在工作或者学习的时候&#xff0c;会经常需要将图片上传到不同的网站或者平台上&#xff0c;然而上传的时候经常会受到尺寸的限制&#xff0c;有时候尺寸太大就需要变小&#xff0c;为了确保上传成功&#xff0c;我们需要将图片进行裁…

Vue Router 最新版惊现使用 BUG

就在刚刚&#xff0c;当我在 写 Vue3 的项目的时候&#xff0c;使用到了 Vue Router 4 的最新版本&#xff08;4.1.6&#xff09;&#xff0c;然而在使用过程中&#xff0c;发现了一个使用问题&#xff0c;起初我还以为&#xff0c;是我这边的代码逻辑有问题&#xff0c;然而在…

九联UNT402A_当贝纯净桌面-卡刷固件包-内有教程

九联UNT402A_当贝纯净桌面-卡刷固件包-内有教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&#xff0c;运行速度提…

【Java笔试强训 33】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;剪花布条…