【算法】字符串

个人主页 : zxctscl
如有转载请先通知

题目

  • 1. 14. 最长公共前缀
    • 1.1 分析
    • 1.2 代码
  • 2. 5. 最长回文子串
    • 2.1 分析
    • 2.2 代码
  • 3. 67. 二进制求和
    • 3.1 分析
    • 3.2 代码
  • 4. 43. 字符串相乘
    • 4.1 分析
    • 4.2 代码

1. 14. 最长公共前缀

在这里插入图片描述

1.1 分析

从第一个字符串开始两两比较,把比较相同的字符部分更新到一个存放目前相同字符的ret中,然后把ret继续向后面的字符串比较,继续更新ret就行。得注意一下,如果在比较中长度超过了那两个字符中叫小的一个,那么就这组比较就结束,换下一组来继续比较。
在这里插入图片描述

1.2 代码

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {string ret=strs[0];for(int i=1;i<strs.size();i++){int j=0;while(j<min(ret.size(),strs[i].size())&&ret[j]==strs[i][j])j++;ret= ret.substr(0,j);}return ret;}    };

2. 5. 最长回文子串

在这里插入图片描述

2.1 分析

回文串有个特点,就是从中间扩展它的两边是对称的。
利用中心扩展算法,固定完中间位置后,用两个指针一个在走左边,一个走右边,如果两个指针执行的字符是一样的,就移动,一直到指针指向的字符不同,或者一个指针越界。
但是这里得分两种情况,如果回文串为奇数,这个方法是正确的;但是如果为偶数,把右边的中间位置加1,此时左右指针在同时移动的时候才是正确的。
在这里插入图片描述

总之就是,先固定一个中心点,然后从中心点开始向两边扩展,注意奇数长度以及偶数长度都需要考虑。

题目要的是最长回文子串,比较一下长度之后,更新一下最大的长度。

2.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. 67. 二进制求和

在这里插入图片描述

3.1 分析

模拟的竖式计算的步骤,如果相加等于2,那么就进1,然后将这个字符取模就加到要返回的结果中,一直到两个字符串都结束。但是结果是与题目要的是相反的,所以得将得到字符串逆置。
在这里插入图片描述

3.2 代码

class Solution {
public:string addBinary(string a, string b) {string ret;int t=0;int cur1=a.size()-1,cur2=b.size()-1;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. 43. 字符串相乘

在这里插入图片描述

4.1 分析

如果直接按照竖式计算来的话,思路是很简单的,但是代码不容易写,得处理进位和高位相乘要补上0,还得处理前导0和计算顺序,很多细节。
所以可以换一种方式,采用无进位相加。
把每一个位置的值相乘之后,先不进位,把每次计算的结果放在一个数组里面,最后再来处理进位。
在这里插入图片描述
这里得先把两个字符串逆置,再无进位相乘相加,然后处理进位,最后处理前导0。

4.2 代码

class Solution {
public:string multiply(string num1, string num2) {int m=num1.size(),n=num2.size();reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());vector<int> tmp(m+n-1);//无进位相乘相加for(int i=0;i<m;i++){for(int j=0;j<n;j++){tmp[i+j]+=(num1[i]-'0')*(num2[j]-'0');}}//处理进位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;}//处理前导0while(ret.size()>1&&ret.back()=='0')ret.pop_back();reverse(ret.begin(),ret.end());return ret;}
};

有问题请指出,大家一起进步!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenStack (T)部署trove

环境&#xff1a;Openstack&#xff08;T&#xff09; CentOS Linux release 7.9.2009 (Core) 正文&#xff1a; 1.控制节点安装trove软件包 # yum install openstack-trove-guestagent openstack-trove python-troveclient openstack-trove-ui –y2.创建数据库&#xff0c…

【Go语言快速上手(一)】 初识Go语言

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Go语言专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Go语言知识   &#x1f51d;&#x1f51d; Go快速上手 1. 前言2. Go语言简介(为…

[Spring Cloud] (3)gateway令牌token拦截器

文章目录 集成redisNacos配置增加 redis配置配置pomredis配置RedisConfigredis序列化工具FastJson2JsonRedisSerializer测试 令牌校验拦截器nacos配置拦截器代码微服务登录接口实现 最终效果-登录接口与数据接口 本文gateway与微服务已开源到gitee 杉极简/gateway网关阶段学习 …

陪玩小程序开发 运营级别陪玩成品搭建 支持二开源码交付 游戏陪玩系统,游戏陪玩源码,游戏陪玩语音社交源码

陪玩系统是一种新兴的服务模式&#xff0c;主要通过线上预约和线下社交、陪伴、助娱、分享、指导等方式为用户提供服务。这种服务模式适用于多种场景&#xff0c;包括家庭陪护、吃饭陪聊、景点伴游、网游陪练、健身指导、线下桌游、酒吧K歌、逛街观影、剧本密室、聚会轰趴、美食…

三年了,期待下一个三年

第一个三年 时间好快&#xff0c;距离我发布我第一篇文章都已经三个年头了。 转眼也从大一新生变成了大四打工人。 在平台上发布博客&#xff0c;分享自己的项目、学习思路、解决的bug都带给我很多收获。 平台上的粉丝&#xff0c;阅读量等&#xff0c;也让我的简历更加出彩。…

绝地求生:杜卡迪来了,这些摩托车技巧不学一下吗?

摩托车在远古版本和现在完全不一样&#xff0c;虽然容易翻车造就了一批玩家“摩托杀手”的外号&#xff0c;但是速度可比今天快多了。 后来在蓝洞的削弱了其加速度&#xff0c;虽然资料上写着最高时速155km/h&#xff0c;但是平时游戏中一般只能拉到110~120km/h。这里写一点摩托…

最新版守约者二级域名分发系统

主要功能 二级域名管理&#xff1a; 我们的系统提供全面的二级域名管理服务&#xff0c;让您轻松管理和配置二级域名。 域名分发&#xff1a;利用我们先进的域名分发技术&#xff0c;您可以自动化地分配和管理域名&#xff0c;确保每个用户或客户都能及时获得所需的域名资源。…

Ceph [OSDI‘06]论文阅读笔记

原论文&#xff1a;Ceph: A Scalable, High-Performance Distributed File System (OSDI’06) Ceph简介及关键技术要点 Ceph是一个高性能、可扩展的分布式文件系统&#xff0c;旨在提供出色的性能、可靠性和可扩展性。为了最大化数据和元数据管理的分离&#xff0c;它使用了一…

网络篇06 | 应用层 自定义协议

网络篇06 | 应用层 自定义协议 01 固定协议设计&#xff08;简化版&#xff09;1&#xff09;总体设计2&#xff09;值设计 02 可变协议设计&#xff08;进阶版&#xff09;1&#xff09;固定头&#xff08;Fixed Header&#xff09;2&#xff09;可变头&#xff08;Variable H…

5、LMDeploy 量化部署 LLMVLM实战(homework)

基础作业&#xff08;结营必做&#xff09; 完成以下任务&#xff0c;并将实现过程记录截图&#xff1a; 配置lmdeploy运行环境 由于环境依赖项存在torch&#xff0c;下载过程可能比较缓慢。InternStudio上提供了快速创建conda环境的方法。打开命令行终端&#xff0c;创建一…

简单认识Git(dirsearch、githack下载),git泄露(ctfhub)

目录 dirsearch下载地址: githack下载&#xff08;一次不成功可多试几次&#xff09; 一、什么是Git 1.git结构 2.git常用命令及示例 3.Git泄露原理 二、Git泄露 1.Log 2.Stash 3.Index 工具准备&#xff1a;dirsearch、githack dirsearch下载地址: GitHub - mauroso…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展&#xff0c;数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践&#xff0c;不仅提升了农业生产的智能化水平&#xff0c;也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

OpenCV的查找命中或未命中

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV4.9更多形态转换 下一篇:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何使用 Hit-or-Miss 转换&#xff08;也称为 Hit-and-Miss 转…

JavaScript知识点 --javaweb学习笔记

什么是Javascript? JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互JavaScript 和Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似JavaScript在1995 年由 Brendan Eich 发明&#xff0c;并…

护眼台灯什么品牌好?推荐目前比较好用的护眼台灯

现在孩子的近视率很高&#xff0c;尤其是儿童青少年居多&#xff0c;上了小学作业都变多了&#xff0c;很多孩子经常需要学习到很晚&#xff0c;不过家长们在重视教育质量的同时&#xff0c;有注意到孩子学习时的光线适合学习吗&#xff1f;用眼过度和光线不合适都容易导致近视…

Java快速入门系列-9(Spring框架与Spring Boot —— 深度探索及实践指南)

第九章:Spring框架与Spring Boot —— 深度探索及实践指南 9.1 Spring框架概述9.2 Spring IoC容器9.3 Spring AOP9.4 Spring MVC9.5 Spring Data JPA/Hibernate9.6 Spring Boot快速入门与核心特性9.7 Spring Boot的自动配置与启动流程详解9.8 创建RESTful服务与数据库交互实践…

OpenHarmony南向开发案例:【智能垃圾桶】

样例简介 智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量&#xff0c;提醒主人及时处理垃圾&#xff1b;通过日程管家可以实现和其他智能设备联动。 核心组件位置功能距离传感器置于垃圾桶盖内侧感应垃圾量红外传感器置于垃圾桶前端感应是否有人靠近光敏电阻开发板…

0.25W 3KVDC 隔离单、双输出 DC/DC SMD 型电源模块 ——TPVT-W2 系列

TPVT-W2系列是一款标准的表面贴装电源模块&#xff0c;完全实现采用全自动贴片机来组装和满足回流焊工艺&#xff0c;大大提高产能和降低人工费用。此系列产品小&#xff0c;效率高&#xff0c;低输出纹波及提供3000V以上的直流电压隔离&#xff0c;SMD封装。

第一节:什么是操作系统

什么是操作系统 一、一台计算机的组成部分1、计算机能干啥2、谈谈计算机硬件 二、什么是操作系统三、学习操作系统的层次 一、一台计算机的组成部分 如下图所示&#xff1a; 这就是就是构成一台计算机的组成部分 1、计算机能干啥 ∙ \bullet ∙计算机是我们专业吃饭的家伙&a…

微信小程序公共组件封装使用

1.在components目录下创建公共组件&#xff0c;以navbar为例 2.完成组件功能 3.调用&#xff0c;如果很多地方都会用到&#xff0c;建议放全局&#xff0c;如果不是则放在需要引用的文件中 3.1全局引用&#xff0c;在app.json做全局引用配置 3.2局部引用&#xff0c;在需要引入…