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

C++:OJ练习(每日练习系列)

编程题:

题一:把字符串转换成整数

把字符串转换成整数_牛客题霸_牛客网

示例1

输入:

"+2147483647"

返回值:

2147483647

思路一:

第一步:it从str的第一个字符开始遍历,定义一个最后输出的值你,以及判断结果正负的flag;

第二步:第一个为正则忽略,为负将flag改为负值;

第三步:遍历字符串,遇到非字母直接退出,否则记录下来;

第四步:最后得到的值n乘以判断正负的flag就是结果。

class Solution {
public:int StrToInt(string str) {//it从str的第一个字符开始遍历string::iterator it = str.begin();int n = 0;//由flag来决定结果的正负int flag = 1;//第一个为正则忽略,为负将flag改为负值if(*it == '+' ){it += 1;}if(*it == '-'){flag = -1;it += 1;}//遍历字符串,遇到非字母直接退出,否则记录下来while(it != str.end()){if(*it < 48 || *it > 57){return 0;}else{n *= 10;n += *it - 48;}++it;}return n * flag;}
};

题二:反转字符串

344. 反转字符串 - 力扣(LeetCode)

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

思路一:

        没有啥好说的直接从第一个字符开始与最后一个字符一起替换!!!

class Solution {
public:void reverseString(vector<char>& s) {int left = 0;int right = s.size() - 1;//从第一个字符开始位置替换while(left < right){swap(s[left],s[right]);++left;--right;}}
};

思路二:

        直接用string类里的逆置接口reverse也可以直接完成反转!!!

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

题三:字符串中的第一个唯一字符

387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

思路一:

第一步:定义一个记录字母的数组

第二步:从下标为0开始遍历,记录字母对应数组下标的个数

第三步:再次遍历字符串,将在数组中只出现一次的的字母对应字符串的下标返回;

第四步:如果第三步中遍历完以后没有找到只出现一次的字母,返回-1.

class Solution {
public:int firstUniqChar(string s) {//定义一个记录字母的数组int arr[26] = {0};int it1 = 0;//从下标为0开始遍历,记录字母对应数组下标的个数while(it1 < s.size()){arr[s[it1] - 'a'] += 1;++it1;}int it2 = 0;//再次遍历字符串,将在数组中只出现一次的的字母对应字符串的下标返回while(it2 < s.size()){if(arr[s[it2] - 'a'] == 1){return it2;}++it2;}return -1;}
};

思路二:

第一步: 分别对字符串进行正序查询和反序查询

第二步: 如果所查询的字符下标相等,说明此字符只出现了一次。

class Solution {public:int firstUniqChar(string s) {for(int i=0; i<s.size(); ++i){int index = s.find(s[i]);int reverse_index = s.rfind(s[i]);  if(index == reverse_index)return i;}return -1;}
};

 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!欢迎各位大佬在评论区探讨,交流!

如果本篇对你有帮助的话,三连支持一下吧。

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              

http://www.lryc.cn/news/245859.html

相关文章:

  • C语言—什么是数组名
  • 如何与死锁斗争!!!
  • 【Java并发】聊聊不安全的HashMap以及ConcurrentHashMap
  • 数据结构--->单链表
  • RT-Thread 线程间同步【信号量、互斥量、事件集】
  • B 树和 B+树 的区别
  • Go iota简介
  • PyQt6库和工具库QTDesigner安装与配置
  • 性能测试:系统架构性能优化思路
  • python字符串格式化
  • Linux的基本指令(二)
  • 每日一题--寻找重复数
  • C#,《小白学程序》第二十二课:大数的乘法(BigInteger Multiply)
  • kafka,RabbitMQ,RocketMQ,他们之间的区别,架构,如何保证消息的不丢失,保证不重复消费,保证消息的有序性
  • uni-app中vue3+setup实现下拉刷新、上拉加载更多效果
  • 微服务实战系列之Nginx(技巧篇)
  • 好工具|datamap,一个好用的地图可视化Excel插件,在Excel中实现地理编码、拾取坐标
  • Java——继承
  • 十、sdl显示yuv图片
  • Docker Nginx容器部署vue项目
  • 【深度学习】如何找到最优学习率
  • 详解—C++三大特性——多态
  • 用idea搭建一个spring cloud微服务项目
  • SpringBoot——启动类的原理
  • Rust语言入门教程(七) - 所有权系统
  • 【MATLAB源码-第89期】基于matlab的灰狼优化算法(GWO)无人机三维路径规划,输出做短路径图和适应度曲线
  • 线程池的饱和策略有哪些?
  • Git设置多个仓库同时推送
  • 前端入职环境安装
  • 《金融科技行业2023年专利分析白皮书》发布——科技变革金融,专利助力行业发展