c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)

本文主要是介绍c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.把字符串转换成整数
    • 题目详情
    • 代码
    • 思路
  • 2. 344.反转字符串
    • 题目详情
    • 代码1
    • 思路1
    • 代码2
    • 思路
  • 3. 387. 字符串中的第一个唯一字符
    • 题目详情
    • 代码
    • 思路
  • 4. 917. 仅仅反转字母
    • 题目详情
    • 代码
    • 思路

1.把字符串转换成整数

传送门

题目详情

在这里插入图片描述

代码

class Solution {
public:int StrToInt(string str) {int flag=1;long long ret=0;string::iterator it=str.begin();// 处理空字符串的情况if (it == str.end()) {return 0;}// 处理符号if (*it == '-') {flag = -1;++it;} else if (*it == '+') {++it;}// 遍历字符串,将每个字符转换为数字并累加到结果中while (it != str.end()) {if (*it >= '0' && *it <= '9') {ret = ret * 10 + (*it - '0');++it;} else {return 0;}} // 根据符号返回最终结果return flag * ret;}
};  

思路

  1. 首先处理空字符串为空的情况()

  2. 再处理第一个字符可能为+ -的情况,直接定一个flag初始化为1,遇到-就赋值为-1

  3. 接下来就利用迭代器进行循环,如果是字符数字就直接使用
    ret = ret * 10 + (*it - '0');
    是其他字符,直接return 0;了

2. 344.反转字符串

传送门

题目详情

在这里插入图片描述

代码1

class Solution {
public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());}}
};

思路1

大家学习了c++,可能直接就想到了。但是我们刷题还是尽量会本质

代码2

class Solution {
public:void reverseString(vector<char>& s) {//reverse(s.begin(),s.end());int left=0;int right=s.size()-1;while(left<right){swap(s[left],s[right]);left++;right--;}}
};

思路

还是老朋友啦:使用双指针法,进行交换,直到相遇

3. 387. 字符串中的第一个唯一字符

传送门

题目详情

在这里插入图片描述

代码

class Solution {
public:int firstUniqChar(string s) {int arr[26]={0};int index=0;char singal='0';//不会出现空字符for(auto e:s){arr[e-'a']++;}//再次遍历string,而不是arrfor(int i=0;i<s.size();i++){if(arr[s[i]-'a']==1){return i;}}return -1;}
};

思路

利用计数排序的思想,利用一个数组

  1. 我们看到,这个字符串只会出现小写字母,我们就定义一个整型数组 arr[26]:0处是a,1处是b…,25处是z
  2. 先把string给遍历一遍,这里是使用了范围for:哪个字母出现一此,就使用 arr[e-'a']++;来进行自增,现在出现一次的字母对应在数组里的值是1,两次是2
  3. 有时有多个出现一次的字母,我们需要返回的是第一个
    所以还是从string开始遍历,为了返回第一个(我一开始因为从arr开始遍历,一直不能通过)

4. 917. 仅仅反转字母

传送门

题目详情

在这里插入图片描述

代码

class Solution {
public:
bool isLetter(char ar)
{if((ar>='A'&&ar<='Z')||(ar>='a'&&ar<='z')){return true;}return false;
}string reverseOnlyLetters(string s) {//仿照快排一次的思想int left=0;int right=s.size()-1;while(left<right){//右侧先行while(left<right&&!isLetter(s[right]))//找字母才停{right--;}while(left<right&&!isLetter(s[left]))//找字母{left++;}swap(s[left],s[right]);right--;left++;}return s;}
};

思路

使用双指针的方法,类似于快速排序中的一次划分。

  1. 具体来说,维护了两个指针(下标) left 和 right,它们分别指向字符串的开头和结尾。
  2. 然后,你使用 while 循环来不断移动这两个指针,并在遇到字母时进行交换。当 left 指向的字符不是字母时,left 指针向右移动;当 right 指向的字符不是字母时,right 指针向左移动。
  3. 一旦找到了两个位置上的字母,就交换它们的位置。最终,当 left 和 right 指针相遇时,整个字符串就完成了反转

今天就到这里啦!

这篇关于c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635237

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意