leetcode算法之字符串

目录

  • 1.最长公共前缀
  • 2.最长回文子串
  • 3.二进制求和
  • 4.字符串相乘

1.最长公共前缀

最长公共前缀
在这里插入图片描述

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        //法一:两两比较
        string ret = strs[0];
        for(int i=1;i<strs.size();i++)
        {
            ret = findCommon(ret,strs[i]);
        }
        return ret;
    }
    string findCommon(string& s1,string& s2)
    {
        int i = 0;
        while(i<min(s1.size(),s2.size()) && s1[i]==s2[i]) i++;
        return s1.substr(0,i);
    }
};
class Solution {
public:
        string longestCommonPrefix(vector<string>& strs) {
        //法二:统一比较
        int n = strs[0].size();
        for(int i=0;i<n;i++)
        {
            char tmp = strs[0][i];
            for(int j = 1;j<strs.size();j++)
            {
                if(i == strs[j].size() || tmp != strs[j][i])
                {
                    return strs[0].substr(0,i);
                }
            }
        }
        return strs[0];
    }
};

2.最长回文子串

最长回文子串
在这里插入图片描述

class Solution {
public:
    string longestPalindrome(string s) {
        //使用中心扩展算法求解
        int begin = 0,len = 0,n = s.size();
        for(int i=0;i<n;i++)
        {
            //先做奇数长度的扩展
            int left = i,right = i;
            while(left>=0 && right<n && s[left] == s[right])
            {
                left--;
                right++;
            }
            if(right-left-1>len)
            {
                begin = left+1;
                len = right-left-1;
            }
            //再做偶数长度的扩展
            left = i,right = i+1;
            while(left>=0&&right<n&& s[left] == s[right])
            {
                left--;
                right++;
            }
            if(right-left-1>len)
            {
                begin = left+1;
                len = right - left-1;
            }
        }
        return s.substr(begin,len);
    }
};

3.二进制求和

二进制求和
在这里插入图片描述

class Solution {
public:
    string addBinary(string a, string b) {
        //模仿列竖式相加
        int t = 0;//表示进位
        int cur1 = a.size()-1;
        int cur2 = b.size()-1;
        string ret;
        while(cur1>=0 || cur2>=0 || t)
        {
            if(cur1>=0) t+=a[cur1--]-'0';
            if(cur2>=0) t+=b[cur2--]-'0';
            ret += t%2+'0';
            t /=2;
        }
        reverse(ret.begin(),ret.end());
        return ret;
    }
};

4.字符串相乘

字符串相乘
在这里插入图片描述

class Solution {
public:
    string multiply(string num1, string num2) {
        //高精度乘法
        //使用无进位相乘再相加,最后再处理进位
        //1.准备工作
        int m = num1.size(),n = num2.size();
        reverse(num1.begin(),num1.end());
        reverse(num2.begin(),num2.end());
        vector<int> tmp(m+n-1);
        //2.无进位相乘再相加
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                tmp[i+j] += (num2[i]-'0')*(num1[j]-'0');
            }
        }
        //3.处理进位
        int cur = 0,t = 0;
        string ret;
        while(cur<m+n-1 || t!=0)
        {
            if(cur<m+n-1) t+=tmp[cur++];
            ret += t%10+'0';
            t /= 10;
        }
        //4.处理前导零
        while(ret.size()>1 && ret.back() == '0') ret.pop_back();
        //5.注意输出结果顺序
        reverse(ret.begin(),ret.end());
        return ret;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层&#xff08;或图层的矢量蒙版&#xff09;上的多个形状还是同一路径层上多个路径&#xff0c;只要对应“路径”面板的一个路径层&#xff0c;可以将这些路径称为该路径层的“子路径”&#xff0c;也称为“组件”。 当一个路径层上有两个以上的子路径时&…

量子力学:科技前沿的探索与挑战

量子力学:科技前沿的探索与挑战 一、量子力学的魅力与挑战 量子力学是研究微观粒子如电子、光子等行为的物理学分支。与经典力学不同,量子力学描述了一个充满不确定性和概率性的世界。在这个世界里,粒子可以同时处于多个状态,只有当我们对其进行测量时,它才会“选择”一个…

【Python基础】爬取豆瓣电影Top250+爬取知乎专栏文章标题

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可

Spark_Spark高阶特性

wscg filter导致断链 Codegen 向量化 simdjson Orc Parquet 支持批量读取 spark本身对parquet支持比较好&#xff0c;因为parquet

服务器中深度学习环境的配置

安装流程 11.17 日&#xff0c;周末去高校参加学术会议&#xff0c;起因&#xff0c; 由于使用了某高校内的公共有线网络&#xff0c; 远程连接服务器后&#xff0c;黑客利用 ssh 开放的 22 端口&#xff0c; 篡改了主机的配置&#xff0c; 使得只要一连上网络&#xff0c; 服…

如何用Python批量删除视频的头尾(88)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 关注我&#xff0c;一起趣味学编程&#xff01; 今天我们继续用Python玩转视频。 还是用Python的第三方库moviepy。 如果你对此文章感兴趣的话&#xff0c;可以看看之前的…

跨越威胁的传说:揭秘Web安全的七大恶魔

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

nodejs669在线图书借阅管理系统vue前端

系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理用户模块、用户表模块、图书借阅模块、图书归还模块、图书分类模块、token表模块、收藏表模块、书籍信息模块、图书资讯模块、留言板模块、书籍信息评论表模块、注册用户模块、配置文件模块、处罚记录模块、在线客…

excel表格在线编辑(开源版)

文章目录 前言一、Luckysheetvue3vite 例子如有启发&#xff0c;可点赞收藏哟~ 前言 本文记录好用的开源在线表格 具体如图显示 另外记录下更名后的univer~&#xff0c;如下图&#xff08;有兴趣可自行详细了解&#xff09; univer 在线思维导图 一、Luckysheet 参考git…

从苹果到蔚来,「车手互联」网罗顶级玩家

作者 |Amy 编辑 |德新 汽车作为家之外的第二大移动空间&#xff0c;正与手机这一移动智能终端进行「车手互联」。 车手互联始于十年前的苹果CarPlay&#xff0c;一度成为时代弄潮儿&#xff0c;不断有后继者模仿并超越。时至今日&#xff0c;CarPlay2.0依旧停留在概念阶段&am…

idea社区版免费下载方式

1.访问中国区网站 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 2.完成下载安装

【C数据(一)】数据类型和变量你真的理解了吗?来看看这篇

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

Python多线程优化:提升程序性能的实例

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python多线程优化&#xff1a;提升程序性能的实例&#xff0c;全文5600字&#xff0c;阅读大约16钟。 多线程是一种有效的并发编程方式&#xff0c;能够提高程序的性能。本文…

交叉编译

1. 交叉开发 交叉编译&#xff1a; 在电脑把程序编写 编译 调试好 再下载到嵌入式产品中运行 编译&#xff1a; gcc 之前编译环境和运行环境是一样的 交叉编译&#xff1a; 编译 把编译代码和运行分开 编译代码在虚拟机中 运行…

WebGL笔记:图形旋转的原理和实现

旋转 1 &#xff09;旋转的概念 三维物体的旋转要比位移复杂一点&#xff0c;三维物体的旋转需要满足以下条件&#xff1a; 旋转轴旋转方向旋转角度 场景举例 模型站在旋转轴的起点进行旋转模型要往左转还是往右转&#xff0c;就是旋转的方向模型旋转的大小就是旋转角度 2 &…

基于SpringBoot的公益慈善平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 基于SpringBoot的公益…

使用Python实现SVM来解决二分类问题

下面是一个使用Python实现SVM来解决二分类问题的例子&#xff1a; # 导入所需的库 from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.svm import SVC import matplotlib.pyplot as plt# 生成一个二分类数据集 X, …

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO

ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO 概述 上节 ESP32-Web-Server 实战编程-通过网页控制设备的 GPIO 讲述了如何通过网页控制一个 GPIO。本节实现在网页上控制多个 GPIO。 示例解析 前端设计 前端代码建立了四个 GPIO&#xff0c;如下死 GPIO 2 在前端的…

STM32F407-14.3.5-01捕获_比较通道

捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器)&#xff0c; 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…