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

news2024/11/16 23:55:52

题目:

例子:

分析题目:

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

思路(本人解法):

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

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

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

这样就有了大概的轮廓:

  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这样就修改了结尾

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

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

相关文章

android的PopupWindow透明弹窗

1.要实现这种效果 2.可以使用这种方式 View v LayoutInflater.from(mContext).inflate(R.layout.ceshi_01, null);PopupWindow popupWindow new PopupWindow(v, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);popupWindow.showAsDropDo…

云原生(第一篇)k8s-组件说明

k8s是什么&#xff1f; go语言开发的开源的跨主机的容器编排工具&#xff1b;全称是kubernetes&#xff1b; k8s的组件&#xff1a; master&#xff1a; ①kube-apiserver 所有服务统一的访问入口&#xff0c;无论对内还是对外&#xff1b; ②kube-controller-manager 资源控…

java8新特性---lambda表达式

1、 Lambda是什么&#xff1f; Lambda 是一个匿名函数&#xff0c;我们可以把 Lambda表达式理解为是一段可以传递的代码&#xff08;将代码像数据一样进行传递&#xff09;。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格&#xff0c;使Java的语言表达能力得到了提…

linux配置git账号密码

HTTP/HTTPS Linux 在Linux环境下使用http/https协议clone/pull GitLab仓库的代码遇到这个问题。以下解决方案也适合GitHub或其他仓库如码云&#xff0c;coding。 解决方案&#xff1a; 在home目录下创建.git-credentials文件vim .git-credentials&#xff0c;输入形如https:…

重装pycharm后一直在Updating indexes

今天卸载pycharm社区版&#xff0c;安装好pycharm专业版之后&#xff0c;右下角一直显示Updating indexes 解决步骤&#xff1a; 先卸载pycharm&#xff1b;打开cmd&#xff0c;键入regedit&#xff0c;打开“注册表编辑器”&#xff1b;在“注册表编辑器”中按ctrlF&#xff…

spring是如何解析@Transactional属性的

1、查看value调用 发现并无地方调用 2、查看 transactionManager调用 发现并无地方调用 3、直接查看transaction被解析方法 SpringTransactionAnnotationParser#parseTransactionAnnotation(java.lang.reflect.AnnotatedElement) 4、查看返回的解析类 Tra…

C++——二分法求多项式曲线区间极值

二分法求多项式曲线区间极值 二分法求解&#xff0c;设置left为左边界&#xff0c;right为右边界&#xff0c;则解一定位于left和right之间&#xff0c;当左右边界之间的差值小于某一精确度时&#xff0c;就认为找到了解。具体操作如下&#xff0c;若是先减后增&#xff0c;首先…

Unity UGUI 实现一个拖拽一个物体到另一个物体上 并返回两个物体是否相交或者是否在对方物体的中心点

Unity版本 2021.3.25f1c1 首先创建一个碰撞管理器 ColliderNodeManager.cs 具体代码实现如下 using System; using UnityEngine;/// <summary> /// 碰撞检测管理器 /// </summary> public class ColliderNodeManager : MonoBehaviour {public static ColliderN…

Qt错误: warning: ignoring old recipe for target ‘childwnd.o‘.

Qt中这样的错误 &#xff1a; 错误原因 &#xff1a; 工程文件, 也就是 *.pro文件, 其中的源文件*.cpp, 头文件*.h, ui文件*.ui以及资源文件*.qrc 重复了, 删掉就好. *.pro文件就是这玩意 &#xff1a; *.pro文件中的文件重复&#xff1a; 如果还是出现这样的错误警告&#…

Flutter中的Alignment是怎么回事?

我们知道Flutter中的Container有个alignment的属性&#xff0c;我们可以设置一些topLeft,center之类的位置名字的值&#xff0c;也可以设置Alignment(x,y)这种具体数值的值。那么Align子widget的位置跟x、y是什么关系呢&#xff1f;以水平方向为例&#xff0c;我们知道x-1表示子…

vs+qt 给打包程序添加图标

1、在创建的qt工程文件中添加如下代码&#xff1a; this->setWindowIcon(QIcon(":/new/prefix1/ico"));//设置软件图标 this->setWindowTitle("XXX软件名 ");//设置软件标题 运行后软件的左上角会有图标 2、让编译成的exe带图标 生成…

dup、dup2、F_DUPFD、dup3、F_DUPFD_CLOEXEC:实例

本实例将输出和错误输出&#xff0c;重定向到文件outlog.txt文件。 dup实现 测试代码&#xff1a; #include <sys/types.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h>…

基于win10环境搭建图片服务器的两种方式

简述 这几天接到一种需求&#xff0c;需要在window环境搭建图片服务&#xff0c;去网上搜一下&#xff0c;最终想出两种方式一种是Nginx方式 &#xff0c;一种是公司常用的iis服务方式&#xff0c;最终使用iis方式&#xff0c;这里简单记录一下。 Nginx nginx方式很简单&#…

机器学习模型优化器Adam报错:ValueError: decay is deprecated in the new Keras optimizer

文章目录 深度学习模型优化器报错&#xff1a;报错原因&#xff1a; 解决方案&#xff1a; 深度学习模型优化器报错&#xff1a; ValueError: decay is deprecated in the new Keras optimizer, pleasecheck the docstring for valid arguments, or use the legacy optimizer,…

5G已难拉动收入增长,运营商对于高投入的5G左右为难

随着三大运营商的5G用户数突破10亿&#xff0c;5G已很难拉动ARPU的增长了&#xff0c;表现出来的业绩就是增长快速放缓&#xff0c;工信部披露的数据显示移动数据业务收入增长已接近于零。 工信部发布了“2023年1&#xff0d;5月份通信业经济运行情况”显示三大运营商的移动数据…

Java(六):Eureka项目搭建、数据请求

Eureka项目搭建、数据请求 Eureka简介Eureka项目创建1、新建Maven项目2、只保留Maven项目的依赖文件3、创建子模块&#xff08;Eureka服务模块&#xff09;4、修改pom.xml5、创建并修改配置文件6、添加Eureka注解7、运行8、创建其他服务9、修改pom.xml10、创建并修改配置文件11…

Mac网络扫描工具iNet Network Scanner

iNet Network Scanner是一款适用于 macOS 系统的网络扫描工具&#xff0c;可以帮助用户快速识别和监控局域网中连接的设备和服务。该软件提供了直观的界面和丰富的功能&#xff0c;支持多种网络协议和扫描选项&#xff0c;并具有高度的可定制性和灵活性。 iNet Network Scanner…

javaee 任务调度 定时任务 schedule

任务调度可以实现指定的时间执行某个任务&#xff0c;比如每一分钟执行一次&#xff0c;指定时间执行一次。 MyTimeTask package com.yyy.schedule;import java.text.SimpleDateFormat; import java.util.TimerTask;public class MyTimeTask extends TimerTask {//重写run方法…

Springboot上传图片和回显示图片

本次演示的是直接使用Springboot上传到服务器而不是七牛云等oss,springboot对于前端传输的文件数据类型格式的封装为MultipartFile,前端上传的图片是被存在服务端的缓存区的,当controller处理的时候,缓存区就被清空,所以需要转存,使用transferTo Api 前端采用elementui 直接上传…

开源之夏2023中选结果公示,504名高校生将投入开源项目贡献

中国科学院软件研究所与openEuler社区联合主办的开源之夏活动项目申请阶段告一段落&#xff0c;中选学生名单已公布。前往官网项目列表即可查看项目中选情况https://summer-ospp.ac.cn/org/projectlist开源之夏今年已进行至第四届&#xff0c;成为每年暑期前最受高校开发者关注…