string类题目(上)

string类题目

题目来源(Leetcode)

在这里插入图片描述

题目一:仅仅反转字母

分析

这个反转的特点在于只反转字母,不反转特殊字符。

法一:如果我们让一个正向迭代器指向第一个字符,让一个反向迭代器指向最后一个字符,会有一个问题,它们在相遇的时候,两个迭代器无法比较。迭代器像指针,但不一定是指针。

我们会发现这俩类型都不一样,无法比较。

同时,如果用*it==*rit来判断两者相遇是不行的,因为有可能二者在移动的半途就遇到指向字符相等的情况。

两个都用正向迭代器或反向迭代器,是可以的。一个++,一个–。

但既然如此,不如直接用下标,不用迭代器。其次,范围for也解决不了这个问题。

因为范围for只能正着遍历,不能倒着遍历。

当然这几种可行的方法里没有绝对的好与坏。

这里用一下下标法:

class Solution {
public:bool isLetter(char ch){if(ch>='a'&&ch<='z')return true;if(ch>='A'&&ch<='Z')return true;return false;}string reverseOnlyLetters(string s) {int left=0,right=s.size()-1;while(left<right){while(left<right&&!isLetter(s[left]))//否则没有字母,left一直走直接越界{++left;}while(left<right&&!isLetter(s[right])){--right;}swap(s[left++],s[right--]);//这里不++和--的话会死循环}return s;}
};

题目二:字符串中的第一个唯一字符

分析

每个字符都和后面其他字符去比较的方法,时间复杂度太差,怎么优化到O(n)呢?

可以用计数排序法

可以统计每个字符出现的次数。

a的ASCII是97,a映射0,b映射1,c映射2,ch-'a’算出相对值,直接就映射到对应位置了,这个字符出现几次就++几次。

还有一个问题是,唯一字符可能有多个,但是我们要求的是第一个。

参考代码:

class Solution {
public:int firstUniqChar(string s) {int count[26]={0};//统计次数for(auto ch:s){count[ch-'a']++;}for(size_t i = 0;i<s.size();++i){if(count[s[i]-'a']==1)return i;}return -1;}
};

这个时间复杂度为O(n),因为我们就遍历了两遍字符串。

题目三:字符串相加

分析

整型就可以相加,但是在一些科研中,整数可能太大了,计算机存不下。long long存到2的64次方,但是可能还是不够大。所以就存到字符串中进行运算。大数运算。

string提供了一套库,从此我们不太需要去用atoi和itoa了:

这个函数可以把字符串转成整型。

这个函数则可以把各种类型转成字符串。

但是我们把给我们的字符串通过stoll转成整型计算完再转回字符串的方式只能对不那么大的数据有用,所以我们不能想着去使用这个捷径。


那么要怎么解决这道题呢?

首先我们要去取这个字符串里的字符,而且要从低位去取,也就是倒着去取。

1024字节是1KB,如果整数的长度是100w(100w长度的整数大小得多大?8个位就已经是亿了,10个位百亿),就才1M空间左右。

最后我们需要往string对象中头插:

single character (6):
iterator insert (iterator p, char c);

代码参考:

class Solution {
public:string addStrings(string num1, string num2) {string str;int end1=num1.size()-1,end2=num2.size()-1;int next=0;//进位while(end1>=0 || end2>=0){int val1=end1>=0?num1[end1--]-'0':0;int val2=end2>=0?num2[end2--]-'0':0;int ret=val1+val2+next;//每次把进位加上next=ret/10;ret=ret%10;str.insert(str.begin(),'0'+ret);//头插到字符串}if(next==1)//处理没处理的进位str.insert(str.begin(),'1');return str;}
};

但是用头插,时间复杂度会较差,所以用尾插:

这个+=运算符重载就是尾插,底层调用的就是pushback。可以尾插一个字符、一个string。

尾插完后需要逆置,string类中没有,但是STL有:

传的区间必须是左闭右开。

class Solution {
public:string addStrings(string num1, string num2) {string str;int end1=num1.size()-1,end2=num2.size()-1;int next=0;//进位while(end1>=0 || end2>=0){int val1=end1>=0?num1[end1--]-'0':0;int val2=end2>=0?num2[end2--]-'0':0;int ret=val1+val2+next;//每次把进位加上next=ret/10;ret=ret%10;str+=('0'+ret);}if(next==1)//处理没处理的进位str+='1';//逆置-STLreverse(str.begin(),str.end());return str;}
};

头插如果遇上较大的数据可能无法通过,insert具有较大的性能消耗。

本文到此结束=_=

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

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

相关文章

ch32v307vct6从头移植FreeRTOS

使用官方的ide可以直接创建带FreeRTOS的工程&#xff0c;但是不利于我们学习移植&#xff0c;所以特此记录怎么从头开始移植FreeRTOS到CH32V307VCT6芯片使用。 下载FreeRTOS源码 首先进入https://www.freertos.org/官网&#xff0c;然后找到如下Download字样&#xff0c;进入下…

华为云通过自定义域名访问桶内对象

问题&#xff1a;通过将自定义域名绑定至OBS桶实现在线预览文件 例如index.html入口文件 且记 自定义域名绑定暂时不支持HTTPS访问方式&#xff0c;只支持HTTP访问方式 自定义域名就先不用部署https证书。 配置完毕之后&#xff0c;将obs桶设置为公开的即可访问 如何在浏览…

Mysql 集群技术

Mysql在服务器中的部署方法 安装MySQL依赖性 rootmysql-node10 ~]# dnf install cmake gcc-c openssl-devel \ ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 下载并解压源码包 使用命令tar zxf mysql-boost-5.7.44.tar.gz进行解压 源码编译安…

硬件面试经典 100 题(81~90)题

81、请问下图电路中二极管 D1、D2 有什么作用&#xff1f; 在 Vi 输入电压接近于零时&#xff0c;D1、D2 给三极管 T1、T2 提供偏置电压&#xff0c;使 T1、T2 维持导通&#xff0c;以消除交越失真。 陈氏解释 这道题参见&#xff1a;硬件面试经典 100 题&#xff08;51~70 题…

【自动化】一共获取6600多公司信息【逆向】一页15还加密。

一、【逆向】一页15还加密。 二、【自动化】一共获取6600多公司信息 三、对于两种方式我喜欢第二种自动化 from DrissionPage import ChromiumPage, ChromiumOptions import time # chrome:version co = ChromiumOptions().set_paths(browser_path=r"C:\Users\lenovo\A…

【MySQL】MySQL表的增删改查(初阶)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 表内容操作 插入内容 按顺序插入 指定某些列插入 一次插入多行记录 插入时间 查询表内容 全列查询 指定列查询 指定表达式查询 用as取别名 ​编辑 去重查询 排序查询…

不同搜索引擎蜘蛛的功能、‌抓取策略与技术实现差异探究

搜索引擎作为互联网信息检索的重要工具&#xff0c;‌其核心功能依赖于背后的“蜘蛛”程序。‌这些蜘蛛程序负责访问互联网上的各种内容&#xff0c;‌并建立索引数据库&#xff0c;‌以便用户能够快速准确地找到所需信息。‌然而&#xff0c;‌不同搜索引擎的蜘蛛在功能、‌抓…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2个程序&#xf…

仿Muduo库实现高并发服务器——EventLoop模块

我刚开始看这个模块时&#xff0c;也是看不明白&#xff0c;什么是事件管理模块。 此时此刻&#xff0c;大领导的背影&#xff0c;还是那么清晰。结合故事模块&#xff0c;慢慢理。 EventLoop模块 成员&#xff1a; 绿色&#xff1a; 利用智能指针对new出来的对象进行管理&…

武汉流星汇聚:亚马逊赋能中小企业,跨境电商市场举足轻重地位稳

在全球经济一体化的浪潮中&#xff0c;跨境电商作为推动国际贸易的重要力量&#xff0c;正以前所未有的速度发展。在这场全球性的商业竞赛中&#xff0c;亚马逊以其卓越的市场表现、强大的技术实力和深厚的品牌影响力&#xff0c;稳居跨境电商市场的领头羊地位&#xff0c;其举…

多任务下载工具.exe

关键代码 void DownloadTask::StartDownload(const QUrl url,QFile *file,qint64 startPoint/* 0 */,qint64 endPoint/* -1 */) {if( NULL file )return;m_HaveDoneBytes 0;m_StartPoint startPoint;m_EndPoint endPoint;m_File file;//根据HTTP协议&#xff0c;写入RANGE…

Vue3基础2

1.Hooks 就是进行数据的封装&#xff0c;同一种类型的 数据 方法 计算属性 &#xff0c;放在一起 命名规范 use功能名称.ts 或.js 创建一个文件夹 hooks 1.useDog.ts import { reactive,onMounted } from "vue"; import axios from "axios";export def…

[数据集][目标检测]红外场景下车辆和行人检测数据集VOC+YOLO格式19069张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;19069 标注数量(xml文件个数)&#xff1a;19069 标注数量(txt文件个数)&#xff1a;19069 标…

SQL AI 工具:颠覆数据库管理与分析的创新力量

一、SQL AI 工具的兴起与发展 在当今数字化的时代&#xff0c;数据量呈现爆炸式增长&#xff0c;企业和个人对于高效管理和分析数据的需求日益迫切。传统的数据库管理和查询方式&#xff0c;对于非技术人员来说存在较高的门槛&#xff0c;操作复杂且耗时。这一背景为 SQL AI 工…

VMware安装Ubuntu20.04

1. 下载 整理的镜像链接 阿里网盘&#xff1a; 阿里云盘分享 提取码: l7y1 2. 新建虚拟机向导 选择自定义&#xff0c;然后下一步。 默认配置&#xff0c;下一步。 选择稍后安装操作系统&#xff0c;下一步。 选择操作系统Linux&#xff0c;版本Ubuntu64位&#xff0c;下一…

OCC笔记:Windows下OCC的编译

一、源码下载 进OCC官网下载https://dev.opencascade.org/release即可&#xff0c;或直接Clone它的Git库https://dev.opencascade.org/resources/git_repository&#xff0c;本文用的源码库版本为7.4.0&#xff08;我本机安装的VS2013&#xff0c;我又想用到AIS_ViewCube&…

AList嵌入动态验证码实现动态校验

前言 晓杰利用ALists创建了个网盘资源站&#xff0c;想着如何增加个动态验证码进行验证后才能进行访问下载&#xff0c;刚开始利用了固定的验证码&#xff0c;用户可以通过JS代码中进行绕过或直接拿到验证码&#xff0c;经过晓杰多次优化&#xff0c;最终版本支持动态获取验证…

Linux(面试篇)

目录 什么是Linux 什么是Linux内核&#xff1f; Linux的基本组件是什么&#xff1f; Bash和Dos之间基本区别是什么&#xff1f; 什么是Root账户 什么是Bash? 什么时CLI? Linux的目录结构时怎样的&#xff1f; 什么是硬链接和软链接&#xff1f; 什么叫CC攻击&#…

Ajax-04

一.同步代码和异步代码 同步代码&#xff1a;浏览器按照我们书写代码的顺序一行一行地执行程序的。在上一行完成后会执行下一行。 同步代码&#xff1a;逐行执行&#xff0c;需原地等待结果&#xff0c;才继续向下执行 异步代码&#xff1a;可以在执行一个可能长期运行的任务…

docker容器图形化管理之Portainer

docker容器轻量级图形页面管理之Portainer 1、查看portainer镜像 [rootlocalhost ~]# docker search portainer 2、下载portainer镜像 [rootlocalhost ~]# docker pull portainer/portainer #选择喜欢的portainer风格镜像下载 3、启动dockerui容器 [rootlocalhost ~]# doc…