Leetcode:最长公共前缀

news2025/3/18 18:42:59

题目链接:14. 最长公共前缀 - 力扣(LeetCode)

普通版本(横向扫描)

主旨:用第一个字符串与后续的每个字符串进行比较,先获取S1和S2的最长公共前缀,然后将该次比较获得的最长公共前缀再与下一个字符串进行比较更新,直至循环结束

 

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (!strs.size()) //数组为空时
        {
            return "";
        }
        string prefix = strs[0];//先获取第一个字符串
        int count = strs.size();//获取数组大小
        for (int i = 1; i < count; ++i) 
        {
            prefix = judgeFunc(prefix, strs[i]);//更新每次的最长公共前缀
        }
        return prefix;
    }

    //比较函数
    string judgeFunc(const string& str1, const string& str2) 
    {
        int length = min(str1.size(), str2.size());//获取最小的那个字符串长度,即每次最大的比较字符
        int index = 0;
        while (index < length && str1[index] == str2[index]) //单字符相同index就++
        {
            ++index;
        }
        return str1.substr(0, index);//返回一个截取(0,index)范围内的str1字符串
    }
};

时间复杂度:O(mn)(其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次)

空间复杂度:O(1)

普通版本(纵向扫描) 

主旨:从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (!strs.size()) 
        {
            return "";
        }
        //纵向扫描不需要存储

        int length = strs[0].size();//获取数组第一个字符串的长度
        int count = strs.size();//获取整个数组的长度

        for (int i = 0; i < length; ++i) 
        {
            char c = strs[0][i];//获取第0行第i列上的字符
            for (int j = 1; j < count; ++j) //便利了
            {

                if ( i == strs[j].size() || strs[j][i] != c) //当已经遍历到某个字符串的末尾(遍历第i列时,等于了某一行字符串的长度strs[j].size) 或 第j行的第i列不等于c
                {
                    return strs[0].substr(0, i);//返回第一个字符串0~i范围内的字符
                }
            }
        }
        return strs[0];//如果每一列的元素都一样,就返回数组的第一个字符串
    }
};

  •  时空复杂度同上

优化版本(分治,待补充)

优化版本(二分查找,待补充)

~over~

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

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

相关文章

stack学习

std::stack 类是一种容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO&#xff08;先进后出&#xff09;数据结构。该类模板用处为底层容器的包装器——只提供特定函数集合。栈从被称作栈顶的容器尾部推弹元素。 operator 赋值给容器适配器 (公开成员函数) 元素访问…

Execl数据导入 EasyExcel实现

官网 1. 需求简介 读取下面表格数据 第一行和第二行是计划信息 第三行是计划详情的抬头信息,以下行是计划详情信息 总段包含多个分段,总段使用了单元格合并功能 2. 实现读取功能 2.1 引入easyexcel依赖 <dependency><groupId>com.alibaba</groupId><…

微信小程序公众号二合一分销商城源码系统 基于PHP+MySQL组合开发的 可多商户商家入驻 带完整的安装代码包以及搭建教程

系统概述 微信小程序公众号二合一分销商城源码系统&#xff0c;是基于PHPMySQL组合开发的一款高效、稳定的电子商务平台解决方案。该系统创新性地将微信公众号与小程序的功能进行了深度整合&#xff0c;为商家提供了一个功能齐全、易于管理的分销商城系统。通过此系统&#xf…

JavaSE——学习总结

一、初识Java 运行Java程序 Java是一门半编译型、半解释型语言 先通过javac编译程序把源文件进行编译&#xff0c;编译后生成的.class文件是由字节码组成的&#xff0c;和平台无关、面向JVM的文件&#xff0c;最后启动java虚拟机来运行.class文件&#xff0c;此时JVM会将字节…

Python | 刷题日记

1.海伦公式求三角形的面积 area根号下&#xff08;p(p-a)(p-b&#xff09;(p-c)) p是周长的一半 2.随机生成一个整数 import random xrandom.randint(0,9)#随机生成0到9之间的一个数 yeval(input("please input:")) if xy:print("bingo") elif x<y:pri…

(十五)统计学基础练习题九(选择题T401-450)

本文整理了统计学基础知识相关的练习题&#xff0c;共50道&#xff0c;适用于想巩固统计学基础或备考的同学。来源&#xff1a;如荷学数据科学题库&#xff08;技术专项-统计学三&#xff09;。序号之前的题请看往期文章。 401&#xff09; 402&#xff09; 403&#xff09; 4…

算法-随机快排及荷兰国旗优化

文章目录 算法介绍 :1. 随机快排解析2. 荷兰国旗问题3. 随机快排优化4. 总结随机快排 算法介绍 : 随机快速排序和传统的快速排序的逻辑本质是一致的,都是找到一个值作为划分的中间位置,左边数值均小于该数值,右边数值均大于该数值,但是与传统的快排又不一致的是,我们的这个位置…

15 - 有趣的电影(高频 SQL 50 题基础版)

15 - 有趣的电影 select* from cinema wheredescription!boring and id%2!0 order by rating desc;

黑龙江等保测评有哪些内容?

与等保1.0相比&#xff0c;新的等保2.0版本有了很大的变化&#xff0c;评估的内容、评估的标准也有了很大的差异。那么新版的《等保2.0》实施后&#xff0c;我们要测试什么&#xff1f; 等保测评首先是有十个大项&#xff0c;安全物理环境&#xff0c;安全区域边界&#xff0c;…

标准发布 | 反渗透和纳滤水处理膜修复再利用技术指南

一、编制单位 本文件由浙江大学、中华环保联合会水环境治理专业委员会提出。 本文件由中华环保联合会归口。 本文件主编单位&#xff1a;浙江大学、河南一膜环保技术有限公司、安徽精高水处理有限公司、国能龙源环保有限公司、湖南沁森高科新材料有限公司。 本文件参编单位&…

getway整合sentinel流控降级

3. 启动sentinel控制台增加流控规则&#xff1a; 根据API分组进行流控&#xff1a; 1.设置API分组&#xff1a; 2.根据API分组进行流控&#xff1a; 自定义统一异常处理&#xff1a; nginx负载配置&#xff1a;

Redis位图

简介 在我们平时开发过程中&#xff0c;会有一些bool型数据需要存取&#xff0c;比如用户一年的签到记录&#xff0c;签了是1&#xff0c;没签是0&#xff0c;要记录365天。如果使用普通的key/value&#xff0c;每个用户要记录365个&#xff0c;当用户上亿的时候&#xff0c;需…

湖南(选址调研)源点咨询 商铺开业前选址调研重要性与流程解析

湖南长沙&#xff08;市场定位&#xff09;源点市场调研认为&#xff0c;选址前首要的准备工作就是对店铺地址进行周密的调查&#xff0c;列出一份详尽的选址调查报告&#xff0c;从而逐一分析店铺的选址的利与弊&#xff0c;最后确定该地址是否适合店铺的运营。源点调研通过多…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…

硬件26、EDA绘制板框

1、放置-板框-矩形 2、在pcb上绘制出需要大小的板框 3、设置板框四个角为圆弧状&#xff0c;在右侧属性栏设置圆角半径

系统工程与信息系统基础

三、企业信息化 目的&#xff1a;提高企业的竞争力 信息化需求&#xff1a; 战略需求&#xff1a;提升组织的竞争能力 运作需求&#xff1a;实现信息化战略目标、运作策略、人才培养的需要 技术需求&#xff1a;信息技术层面上对系统的完善、升级、集成 企业信息化方法&…

ArcGIS for Vue3

二维&#xff1a; 1、创建vue项目 npm create vitelatest 2、安装ArcGIS JS API依赖包 npm install arcgis/core 3、引入ArcGIS API for JavaScript模块 <script setup> import "arcgis/core/assets/esri/themes/light/main.css"; import Map from arcgis…

功效系数法

功效系数法&#xff08;Efficacy Coefficient Method&#xff09;是一种综合评价方法&#xff0c;它根据多目标规划的原理&#xff0c;对每个评价指标确定一个满意值和不允许值&#xff0c;以满意值为上限&#xff0c;以不允许值为下限。计算各指标实现满意值的程度&#xff0c…

Gorm中time.time的默认时区

问题复现 期望查询结果时区使用本机的默认时区&#xff08;东八区&#xff09;&#xff1a; 2024-06-05 04:43:54 0800 CST 实际查询结果&#xff08;UTC&#xff09;&#xff1a; 2024-06-04 20:43:54 0000 UTC 如何解决 问题是通过gorm查询mysql数据库时做了转化&#xff0…

目标检测数据集 - 城市道路行驶车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

​​​数据集介绍&#xff1a;城市道路行驶车辆检测数据集&#xff0c;真实监控场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道路快速行驶车辆、城市道路慢速行驶车辆、城市道路密集行驶车辆、城市道路夜间低光行驶车辆数据等。数据集标注标签划分为 "…