Day.1 LeetCode刷题练习(最长公共前缀 C/C++两种解法)

2023-11-18

题目:

例子:

分析题目:

主要目的:求出各个字符串的公共前缀

思路(本人解法):

用所给实例来看,不难看出我们可以直接以竖着对应来查看是否是公共前缀 , 

这样就有了一定的思路 , 然后接着想如何让他找到最长的公共前缀后就 停止下来呢 

这样就能想到,从最短的字符串下手(因为公共前缀最长就只能是最短的字符串或者是最长字符串的前几个)

这样就有了大概的轮廓:

  1. 找到最短字符串(记录其长度)
  2. 通过比较的方法依次竖向比较,然后遍历(每个字符串和每个对应的前缀),找到公共前缀的最后(也就是不同/len的时候就能退出了)竖向比较:

 

Cyy:

char * longestCommonPrefix(char ** strs, int strsSize){
    int i = 0;
    int j = 0;
//找到最短的字符串以及记录其最短的长度
    int len = strlen(strs[0]);
    for(int i = 1 ; i < strsSize ; i++)
    {
        if(strlen(strs[i]) < len)
        {
            len = strlen(strs[i]);
        }
    }
//竖向比较
//从下标为0处开始,到最短字符串的最后一个字符(len-1)
    for(i = 0; i < len ;i++)
    {
        for(j = 1; j < strsSize;j++)//比较每个字符串的下标i处的字符是否相等(此时进行竖向比较)
        {
            if(strs[j][i] != strs[j-1][i])//当有不同的时候就退出
                break;
        }
        if(j != strsSize)//到此处有两种可能,一是有不同中途退出的,二是全部相同后自然退出的
            break;//当不是自然退出的时候 j != strSize 、 此时就表示已经找到公共前缀的最后一个那就退出循环
    }
    strs[0][i] = '\0';//直接把下标i处换成\0,这里利用了字符串以\0结尾的特性
    return strs[0];
}

通过查看官方给的答案后进一步优化:

此时我们还能不再判断最短的字符串

而是直接在内部来查看,当竖向查找到了其中一个字符串的最后一个元素时就退出循环

char * longestCommonPrefix(char ** strs, int strsSize){
    int i = 0;
    int j = 0;
    int len = strlen(strs[0]);
    for(i = 0; i < len ;i++)
    {
        for(j = 1; j < strsSize;j++)
        {
            if(strs[j][i] != strs[j-1][i] || strlen(strs[j]) == i)//此处进行了优化
                break;
        }
        if(j != strsSize)
            break;
    }
    strs[0][i] = '\0';
    return strs[0];
}

C++:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int number = strs.size();
        int len = strs[0].size();
        for(int i = 0; i < len;i++)
        {int j;
            for(j = 1 ; j < number;j++)
            {
               if(strs[j][i] != strs[0][i] || strs[j].size() == i)
                    break;
            }
            if(j != number)
                return strs[0].substr(0,i);
        }
        return strs[0];
    }
};

总结学到什么:

  • 模拟法(模拟题目所给步骤来解决问题)
  • 用些地方可以进行优化
    • 优化后不用再查找最小字符串(因为后面有需要遍历的字符串所以可以再后面再进行 与i的进行判断看是否到某些字符串的结尾了)
  • 字符串以\0结尾可以把一个字符串的某个位置改成\0这样就修改了结尾
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Day.1 LeetCode刷题练习(最长公共前缀 C/C++两种解法) 的相关文章

随机推荐

  • OKR与CFR管理模式(一)-什么是OKR?

    前言 无论任何管理书籍 都是围绕着人性 如何激发员工的人性中的自尊和自我价值观 自我成就感 作为一名领导者 在管理面前 必须要是冷静 安静的对待他人 好主意 再加上 卓越的执行 就一定可以创造奇迹 而这正是OKR 目标与关键结果 Objec
  • 常见面试问题 - 2(计算机网络)

    OSI七层模型 TCP IP四层模型 五层协议 OSI七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 TCP IP四层模型 应用层 传输层 网络层 网络接口层 五层体系结构 应用层 传输层 段 网络层 包 数据链路层
  • glint360k数据集的解压

    关于训练集的解压早就有人写了blog了 文章地址 https blog csdn net weixin 43408232 article details 109687884 但是对于它剩余的7个bin文件我很困惑 根据他们在官方的微博上声明
  • Verilog学习(3)initial,always,task,function,常见系统任务

    结构说明语句 Verilog中任何过程模块都属于以下四种结构的说明语句 initial说明语句 always 说明语句 task说明语句 function说明语句 一个程序模块可以有多个initial和always 过程块 每个initia
  • 常用的windows命令大全

    当我们熟练掌握windows命令时 可以通过输入命令来快速完成各种系统操作 非常的便捷 那么常用的windows命令有哪些呢 今天 小编就把命令介绍给大家 windows命令 1 gpedit msc 组策略 2 sndrec32 录音机
  • 12-JavaScript的正则表达式 DAY9 (04.20)

    1 正则表达式的定义 正则表达式是由一个字符序列形成的搜索模式 用来匹配 当在文本中搜索数据时 可以使用搜索模式来描述查询内容 其可以是一个简单的字符 或者一个更复杂的模式 2 正则表达式的创建 1 字面量 var reg1 abc g g
  • 论人工智能历史、现状与未来发展战略

    来源 学术前沿 作者 郭毅可 人工智能问世60多年来 承载着人类对自己的智慧的无限自信 在这样的自信下 人工智能发展到了今天 人们在追求机器从事尽可能多的智力劳动的路上走得很快 也很远 今天人工智能的发展 实际上标志着人类第三次认知革命 即
  • 理解cpp的重载,重写,重定义

    函数重载 overload 函数重载是指在一个类中声明多个名称相同但参数列表不同的函数 这些的参数可能个数或顺序 类型不同 但是不能靠返回类型来判断 特征是 1 相同的范围 在同一个作用域中 2 函数名字相同 3 参数不同 4 virtua
  • 死锁产生条件和解决办法

    死锁 死锁产生的四个条件 产生死锁必须同时满足以下四个条件 只要其中任一条件不成立 死锁就不会发生 互斥条件 线程要求对所分配的资源 如打印机 进行排他性控制 即在一段时间内某资源仅为一个线程所占有 此时若有其他线程请求该资源 则请求线程只
  • 城市污水管网监测系统解决方案

    一 方案概述 在经济快速发展和政府政策的推动下 以产业聚焦为核心的城市园区经济发展迅速 由于在城市园区企业 工厂在生产制造过程产生了大量的废水等其他污染物都是由污水管进行排放 一旦发生井下污水管网堵塞 会造成废水中的气体等其他有害物质的传播
  • LSTM预测大写数字的c++ 代码

    自己写的LSTM预测大写数字的c 代码 有较详细的注释 有不懂的可以交流 平台 vs2015 头文件 LstmCppH h pragma once include iostream include math h include stdlib
  • Mysql 数据库

    数据库基础 1 什么是数据库 用来存储数据 数据库可在硬盘及内存中存储数据 数据库与文件存储数据的区别 数据库本质也是通过文件来存储数据 数据库的概念就是系统的管理存储数据的文件 数据库介绍 本质就是存储数据的C S架构的socket套接字
  • 商务智能-第六章 数据挖掘

    Lecture6 Data Mining 1 数据挖掘 在数据库及数据仓库中存贮有大量的数据 它们具有规范的结构形式与可靠的来源 且数量大 保存期间长 是一种极为宝贵的数据资源 充分开发 利用这些数据资源是目前计算机界的一项重要工作 1 1
  • netty handler的执行顺序(3)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天解决2个问题 1 handler在pipeline当中究竟是如何存储的 2 在遍历handler的过程中 会根据event的不同 调用不同的handler 这一点是如何
  • Fresco使用

    fresco简单使用 先上文档地址 github https github com facebook fresco 文档 https frescolib org docs index html 从在github上最好点击英文文档 中文的版本
  • 一文学会使用GCeasy——一款超好用的在线分析GC日志的网站

    https blog csdn net CoderBruis article details 101234738
  • #145 - Table 'xxxxx' is marked as crashed and should

    数据表损坏了 只需要修复一下就可以了 进入数据库 执行以下SQL REPAIR TABLE lt datastore
  • box-shadow 设置后看不到的问题

    引子 在修复问题的时候 发现一个元素设置了 box shadow 属性 其它的元素也有公用 但这个元素的阴影看不见 试着把颜色值变的更明显 但还是看不到 问题示例 示例二维码 Origin My GitHub 问题原因 首先想到是不是属性写
  • 12月份GitHub上最热门的Web开源项目

    在过去的一个月里 mybridge对将近200个Web开发开源项目排名 mybridge根据各种因素 对项目进行比较 并从中精选出前10位 上榜开源项目所获得Star数平均为 5550 1Quicklink https github com
  • Day.1 LeetCode刷题练习(最长公共前缀 C/C++两种解法)

    题目 例子 分析题目 主要目的 求出各个字符串的公共前缀 思路 本人解法 用所给实例来看 不难看出我们可以直接以竖着对应来查看是否是公共前缀 这样就有了一定的思路 然后接着想如何让他找到最长的公共前缀后就 停止下来呢 这样就能想到 从最短的