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,一经查实,立即删除!

相关文章

kafka常用命令汇总

文章目录 命令1命令2命令3命令4命令5命令6命令7命令8命令9 其他说明提示:以下是本篇文章正文内容,Kafka 0.9.x 及更高版本中使用 在使用 Kafka 命令行工具时,–zookeeper 和 --bootstrap-server 参数用于指定不同的连接信息,具体取决于你使用的命令以及 Kafka 版本。 --zo…

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桶设置为公开的即可访问 如何在浏览…

Redis为什么会阻塞

Redis的一些阻塞点 BigKey删除&#xff0c;删除数据库&#xff0c;AOF日志同步聚合操作&#xff0c;全量查询操作&#xff0c;从库读取RDB文件。 其中删除BigKey&#xff0c;AOF日志&#xff0c;删除数据库可以异步执行。 聚合操作&#xff0c;全量查询&#xff0c;从库读取RD…

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…

【Java EE】深入理解 Java 线程的生命周期与状态转换

多线程编程在 Java 中是实现高效并发的核心技术之一。每个线程在其生命周期内会经历多个状态&#xff0c;这些状态反映了线程在特定时间点的行为与系统资源的使用情况。了解线程的状态及其转换机制&#xff0c;对于编写健壮的并发程序尤为重要。本文将深入探讨 Java 线程的六种…

python 零星知识点

一、头部注释 在Python脚本中&#xff0c;头部注释&#xff08;也称为文档字符串或模块级注释&#xff09;用于提供关于脚本的元数据和描述信息。除了指定解释器和编码方式外&#xff0c;还可以包含其他信息。以下是一些常见的头部注释示例&#xff1a; 1.模块描述 "&qu…

【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 工…

人工智能开发NPU使用

1. NPU使用 RK3588 内置 NPU 模块, 处理性能最高可达6TOPS&#xff08;即每秒处理6万亿次操作&#xff09;。这款NPU不仅拥有强大的计算能力&#xff0c;支持TensorFlow、Caffe、Tflite、Pytorch、Onnx NN、Android NN 等常见框架。使用该NPU需要下载RKNN SDK&#xff0c;RKNN…

深度学习--自监督学习

自监督学习是一种无需大量人工标注的数据驱动方法&#xff0c;在生成模型中应用广泛。自监督学习通过利用数据中的固有结构或属性创建“伪标签”&#xff0c;使模型在没有人工标签的情况下进行学习。这种方法既提高了模型的训练效率&#xff0c;又降低了对标注数据的依赖。 概…