当前位置: 首页 > news >正文

算法思想总结:字符串

一、最长公共前缀

. - 力扣(LeetCode)

思路1:两两比较  时间复杂度mn  实现findcomon返回两两比较后的公共前缀

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string ret=strs[0];size_t n=strs.size();for(size_t i=0;i<n;++i)ret=findcommon(ret,strs[i]);return ret;}string findcommon(string&s1,string&s2){size_t n=min(s1.size(),s2.size());size_t i=0;for(;i<n;++i)if(s1[i]!=s2[i]) break;return s1.substr(0,i);}
};

 思路2:统一比较  时间复杂度mn

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {//统一比较size_t m=strs.size(),n=strs[0].size();for(int i=0;i<n;++i){char temp=strs[0][i];for(int j=0;j<m;++j)if(i==strs[j].size()||strs[j][i]!=temp)return strs[0].substr(0,i); }return strs[0];//可能只有一个字符串}
};

二、最长回文子串

. - 力扣(LeetCode)

解法:中心扩展算法

1、固定一个中心点,从中心点开始往两边扩展

2、要考虑奇数长度,也要考虑偶数长度

class Solution {
public:string longestPalindrome(string s) {size_t begin=0; size_t len=0;//帮助我们记录符合要求的回文子串//中心扩展算法size_t n=s.size();for(size_t 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);}
};

三、二进制求和(字符串相加)

. - 力扣(LeetCode)

解法:模拟进位相加,但是区别就是得逢2进1 ,再将最后的结果逆序。

class Solution {
public:string addBinary(string a, string b) {//模拟进位相加,但是区别就是逢2进1size_t n1=a.size(),n2=b.size();string ret;//返回   从后往前模拟进位相加ret.reserve(n1>n2?n1+1:n2+1);//提前开空间  减少时间消耗int cur1=n1-1; int cur2=n2-1;int t=0;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;}
};

 四、字符串最后一个单词的长度

字符串最后一个单词的长度_牛客题霸_牛客网

该题不能用cin>>s 因为遇到空格就会停止,所以要解决这个问题就必须用getline

而string中的rfind可以帮助我们从后往前找。

#include <iostream>
using namespace std;int main() 
{string s;getline(cin,s);//接受一个带空格的字符串cout<<s.size()-1-s.rfind(" ")<<endl;//while(cin>>s);//cout<<s.size();return 0;
}

因为该题凑巧找的是最后一个,所以也可以直接用while(cin>>s) 最后会接受到最后一个字符串

五、仅仅翻转字母

. - 力扣(LeetCode)

       非英文字符保存在原地,而英文字母翻转,所以我们可以用双指针分别指向字符串的首尾位置,如果遇到非字母的就往中间靠,当两个指针指向的都是字母的时候,交换两个指针指向的字母即可 

class Solution {
public:string reverseOnlyLetters(string s){//双指针法size_t begin=0;size_t end=s.size()-1;while(begin<end){while(begin<end&&!isalpha(s[begin])) ++begin;while(begin<end&&!isalpha(s[end]))   --end;swap(s[begin],s[end]);++begin;--end;}return s;}
};

六、验证回文串

. - 力扣(LeetCode)

       验证回文串,只需要用双指针指向首尾的位置,对非字母数字的直接跳过,当两个指针停下来的时候判断对应位置的字母是不是相同的。

class Solution {
public:bool isPalindrome(string s){//双指针往中间靠,直到相遇则回文  int length=s.size();int left=0,right=length-1;while(left<right){while(left<right&&!isalnum(s[left]))  ++left;while(left<right&&!isalnum(s[right])) --right;if(left<right)if(tolower(s[left])!=tolower(s[right]))return false;++left;--right;}return true;}
};

七、反转字符串II

. - 力扣(LeetCode)

class Solution {
public:string reverseStr(string s, int k){int n=s.size();for(int i=0;i<n;i+=2*k)reverse(s.begin()+i,s.begin()+min(i+k,n));return s;}
};

需要注意的是如果i+k超过了n,就要将他修正为n。

 八、反转字符串III

双指针,始终让两个指针指向字符串中某个单词的头和尾,然后进行反转。 

class Solution {
public:string reverseWords(string s){int head=0,tail=0;//双指针法int length=s.size();while(head<length){if(s[head]!=' '){while(tail<length&&s[tail]!=' ')++tail;reverse(s.begin()+head,s.begin()+tail);}++tail;head=tail;}return s;}
};

 九、字符串相乘(重点)

. - 力扣(LeetCode)

class Solution {
public: //从后往前不需要处理前导0string multiply(string num1, string num2){ //高位相乘补0   处理前导0  最后处理进位if(num1=="0"||num2=="0") return "0";string ret="0";//处理返回值 方便进行相加int m = num1.size(), n = num2.size();for(int i=n-1;i>=0;--i){string cur;int add=0;//处理进位for(int j=n-1;j>i;--j) //为了高位的补0cur.push_back('0');int y=num2[i]-'0';//取出这一位for(int j=m-1;j>=0;--j){int x=num1[j]-'0';int product=x*y+add;cur.push_back(product%10+'0');add=product/10;//保留进位}while(add!=0){cur.push_back(add%10+'0');add/=10;}reverse(cur.begin(),cur.end());ret= addBinary(ret, cur);}return ret;}string addBinary(string a, string b) {//模拟进位相加,但是区别就是逢2进1size_t n1=a.size(),n2=b.size();string ret;//返回   从后往前模拟进位相加ret.reserve(n1>n2?n1+1:n2+1);//提前开空间  减少时间消耗int cur1=n1-1; int cur2=n2-1;int t=0;while(cur1>=0||cur2>=0||t) //可能会有进位的遗失{if(cur1>=0) t+=a[cur1--]-'0';if(cur2>=0) t+=b[cur2--]-'0';ret+=t%10+'0';t/=10;}reverse(ret.begin(),ret.end());//结果要反转一下return ret;}
};

class Solution {
public:string multiply(string num1, string num2) {//处理相乘问题->1、先无进位相乘 2、然后相加 3、然后处理进位  4、然后处理前导0size_t m=num1.size(),n=num2.size();//准备工作,模拟进位前将两个字符串先进行逆序reverse(num1.begin(),num1.end());reverse(num2.begin(),num2.end());vector<size_t> temp(m+n-1);for(size_t i=0;i<m;++i) //无进位相乘for(size_t j=0;j<n;++j) temp[i+j]+=(num1[i]-'0')*(num2[j]-'0');//无进位相乘后累加//处理进位size_t cur=0,t=0;//t是进位信息string ret;ret.reserve(m+n);//优化一下,提前开空间while(cur<m+n-1||t) {if(cur<m+n-1) t+=temp[cur++];ret+=t%10+'0';t/=10;}//3 处理前导0while(ret.size()>1&&ret.back()=='0') ret.pop_back();reverse(ret.begin(),ret.end());return ret;}
};

十、字符串中常用的一些接口

C语言相关:

C语言:字符函数和字符串函数-CSDN博客

 C++相关:

C++:String类的使用-CSDN博客

相关文章:

算法思想总结:字符串

一、最长公共前缀 . - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//两两比较 string retstrs[0];size…...

滑块拼图验证码识别

通常滑块验证码都是横向滑动&#xff0c;今天看到一个比较特别的滑块拼图验证码&#xff0c;他不仅能在横向上滑动&#xff0c;还需要进行纵向滑动。如下图所示&#xff1a; 他的滑块在背景图片的左上角&#xff0c;需要鼠标拖动左上角的滑块&#xff0c;移动到背景图的缺口位置…...

Activity启动流程

1 冷启动与热启动 应用启动分为冷启动和热启动。 冷启动&#xff1a;点击桌面图标&#xff0c;手机系统不存在该应用进程&#xff0c;这时系统会重新fork一个子进程来加载Application并启动Activity&#xff0c;这个启动方式就是冷启动。 热启动&#xff1a;应用的热启动比冷…...

PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践

大家好&#xff0c;我是码农先森。 我之前待过一个做 ToB 业务的公司&#xff0c;主要是研发以会员为中心的 SaaS 平台&#xff0c;其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」&#xff0c;这个租户可以拥有一个或多个子系…...

使用SOAP与TrinityCore交互(待定)

原文&#xff1a;SOAP with TrinityCore | TrinityCore MMo Project Wiki 如何使用SOAP与TC交互 SOAP代表简单对象访问协议&#xff0c;是一种类似于REST的基于标准的web服务访问协议的旧形式。只要必要的配置到位&#xff0c;您就可以利用SOAP向TrinityCore服务器发送命令。 …...

QQ频道导航退出

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

MySQL里的累计求和

在MySQL中&#xff0c;你可以使用SUM()函数来进行累计求和。如果你想要对一个列进行累计求和&#xff0c;可以使用OVER()子句与ORDER BY子句结合&#xff0c;进行窗口函数的操作。 以下是一个简单的例子&#xff0c;假设我们有一个名为sales的表&#xff0c;它有两个列&#x…...

Python爬虫速成之路(3):下载图片

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…...

同三维T80004EA编解码器视频使用操作说明书:高清HDMI编解码器,高清SDI编解码器,4K超清HDMI编解码器,双路4K超高清编解码器

同三维T80004EA编解码器视频使用操作说明书&#xff1a;高清HDMI编解码器&#xff0c;高清SDI编解码器&#xff0c;4K超清HDMI编解码器&#xff0c;双路4K超高清编解码器 同三维T80004EA编解码器视频使用操作说明书&#xff1a;高清HDMI编解码器&#xff0c;高清SDI编解码器&am…...

ChatGPT提问获取高质量答案的艺术PDF下载书籍推荐分享

ChatGPT高质量prompt技巧分享pdf&#xff0c; ChatGPT提问获取高质量答案的艺术pdf。本书是一本全面的指南&#xff0c;介绍了各种 Prompt 技术的理解和利用&#xff0c;用于从 ChatGPTmiki sharing中生成高质量的答案。我们将探讨如何使用不同的 Prompt 工程技术来实现不同的目…...

微信小程序中的数据通信

方法1: 使用回调函数 在app.js中:可以在修改globalData后执行一个回调函数,这个回调函数可以是页面传递给app的一个更新函数。// app.js App({globalData: {someData: ,},setSomeData(newData, callback) {this.globalData.someData = newData;if (typeof callback === funct…...

everything搜索不到任何文件-设置

版本&#xff1a; V1.4.1.1024 (x64) 问题&#xff1a;搜索不到任何文件 click:[工具]->[选项]->下图所示 将本地磁盘都选中包含...

python如何结束程序运行

方法1&#xff1a;采用sys.exit(0)&#xff0c;正常终止程序&#xff0c;从图中可以看到&#xff0c;程序终止后shell运行不受影响。 方法2&#xff1a;采用os._exit(0)关闭整个shell&#xff0c;从图中看到&#xff0c;调用sys._exit(0)后整个shell都重启了&#xff08;RESTAR…...

InnoDB

InnoDB 是 MySQL 默认的存储引擎&#xff0c;它提供了事务支持、行级锁定和外键约束等高级功能。下面详细解析 InnoDB 的一些底层原理和关键特性。 1. 数据存储结构 表空间&#xff08;Tablespace&#xff09; InnoDB 使用表空间来管理数据存储&#xff0c;表空间可以是共享…...

spark运行报错:Container killed by YARN for exceeding memory limits

用spark跑数据量大的离线调度任务报错&#xff1a;Reason: Container killed by YARN for exceeding memory limits. 19.0 GB of 19 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled becaus…...

(三)大模型/人工智能/机器学习/深度学习/NLP

一.模型 模型&#xff0c;简单来说&#xff0c;就是用来表示或解释某个事物、现象或系统的一种工具或框架。它可以是实体的&#xff0c;也可以是虚拟的&#xff0c;目的是为了帮助我们更好地理解和预测所描述的对象。在生活中&#xff0c;模型无处不在&#xff0c;它们以各种形…...

数学基础 -- 三角学

三角学 三角学&#xff08;Trigonometry&#xff09;是数学的一个分支&#xff0c;主要研究三角形的边长与角度之间的关系。三角学在几何学、物理学、工程学等多个领域中有广泛的应用。以下是三角学的一些基本概念和公式&#xff1a; 基本概念 直角三角形&#xff1a;一个角…...

基于BitMap的工作日间隔计算

背景问题 在我们实际开发过程中&#xff0c;时常会遇到日期的间隔计算&#xff0c;即计算多少工作日之后的日期&#xff0c;在不考虑法定节假日的情况下也不是那么复杂&#xff0c;毕竟周六、周日是相对固定的&#xff0c;Java语言也提供了丰富的类来处理此问题。 然而&#x…...

sqlite3 — DB-API 2.0 interface for SQLite databases

sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.4 documentation sqlite3 — DB-API 2.0 interface for SQLite databasessqlite3 — SQLite数据库的DB-API 2.0接口 Source code: Lib/sqlite3/ 源代码位置&#xff1a;Lib/sqlite3/ SQLite is a C…...

Spring Boot中的安全配置与实现

Spring Boot中的安全配置与实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Spring Boot中的安全配置与实现&#xff0c;看看如何保护你的…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...