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

【C++初阶】值得一刷的字符串string相关oj题

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


目录

  • 一、把字符串转化为整数
  • 二、字符串相加
  • 三、反转字符串
  • 四、字符串中的第一个唯一字符
  • 五、字符串最后一个单词的长度
  • 六、验证回文串
  • 七、反转字符串 II
  • 八、 反转字符串中的单词 III
  • 九、高精度乘以高精度

一、把字符串转化为整数

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:int StrToInt(string str) {// 特判集合可能为空集的情况if (str.empty()) return 0;int flag = 1; // 用来判断这个数是正数还是负数int i = 0; // 遍历字符串if (str[i] == '-'){flag = -1;i++;}else if (str[i] == '+'){i++;}int ans = 0; // 存储数字for (; i < str.size(); i++){if (str[i] < '0' || str[i] > '9'){return 0;}ans = ans * 10 + (str[i] - '0');}return ans * flag;}
};

二、字符串相加

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:// 解决思路:模拟string addStrings(string num1, string num2) {//  将字符串翻转(原因:进位头插很头疼)reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());string ans; // 答案int t = 0; // 进位for (int i = 0; i < num1.size() || i < num2.size() || t; i++){if (i < num1.size()) t +=  num1[i] - '0';if (i < num2.size()) t +=  num2[i] - '0';ans.push_back(t % 10 + '0');t /= 10;}// 最后将答案翻转reverse(ans.begin(), ans.end());return ans;}
};

三、反转字符串

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:// 解决思路:双指针算法void reverseString(vector<char>& s) {vector<char>::iterator left = s.begin();vector<char>::iterator right = s.end() - 1;while (left < right){char t = *left;*left = *right;*right = t;left++;right--;}for (auto& e : s){cout << e;}}
};

四、字符串中的第一个唯一字符

题目链接:点击跳转

  • 解题思路1:哈希表
class Solution {
public:int firstUniqChar(string s) {unordered_map<char, int> heap;for (int i = 0; i < s.size(); i++){heap[s[i]]++;}for (int i = 0; i < s.size(); i++){if (heap[s[i]] == 1){return i;}}return -1;}
};
  • 解题思路2:用数组模拟哈希表
class Solution {
public:int firstUniqChar(string s) {int heap[26] = {0};for (int i = 0; i < s.size(); i++){heap[s[i] - 'a']++;}for (int i = 0; i < s.size(); i++){if (heap[s[i] - 'a'] == 1){return i;}}return -1;}
};

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

题目链接:点击跳转

在这里插入图片描述

  • 解题思路1:从最后一个字符开始遍历,直到遇到空格停止
#include <iostream>
#include <string>
using namespace std;int main()
{string s;getline(cin, s);int ans = 0;for (int i = s.size() - 1; i >= 0; i--){if (s[i] != ' ') ++ans;else break;}cout << ans << endl;return 0;
}
  • 解题思路2:巧用函数(不推荐,因为函数根本记不住hh)
#include <iostream>
using namespace std;int main()
{string s;getline(cin, s);// rfind:从后往前查找目标int space_of_lastpos = s.rfind(' ');int last_pos = s.size() - 1;int res = last_pos -  space_of_lastpos;cout << res << endl;return 0;
}

六、验证回文串

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:bool isPalindrome(string s) {// 将大写字符转换为小写字符string str;for (auto& e : s){if (e >= 'A' && e <= 'Z'){str += tolower(e);}// 移除所有非字母数字字符之后// 意思是保留字母 + 数字else if ((e >= 'a' && e <= 'z') || (e >= '0' && e <= '9')){str += e;}}// 判断回文串if (str.empty()) return true; // 特殊情况string str2(str);reverse(str2.begin(), str2.end());if (str == str2) return true;else return false;}
};

七、反转字符串 II

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:// 思路:将题目描述转化为代码即可string reverseStr(string s, int k) {// 间隔2kfor (int i = 0; i < s.size(); i += (2 * k)) {// 1. 每隔 2k 个字符的前 k 个字符进行反转// 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符if (s.size() - i >= k){reverse(s.begin() + i, s.begin() + i + k );continue;}// 3. 剩余字符少于 k 个,则将剩余字符全部反转。else{reverse(s.begin() + i, s.begin() + s.size());}}return s;}};

八、 反转字符串中的单词 III

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:// 解题思路:双指针算法string reverseWords(string s) {for (int i = 0; i < s.size(); i++){int j = i;while (j < s.size() && s[j] != ' ') j++;if (s[j] == '\0'){reverse(s.begin() + i, s.begin() + s.size());break;}reverse(s.begin() + i, s.begin() + j);i = j;}return s;}
};

九、高精度乘以高精度

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:string multiply(string num1, string num2) {vector<int> A,B;//  到存int n = num1.size(), m = num2.size();for (int i = n - 1;i >= 0; i--)A.push_back(num1[i] - '0');for (int i = m - 1;i >= 0;i--)B.push_back(num2[i] - '0');vector<int> c(n + m);for(int i = 0;i < A.size();i++){for(int j = 0;j < B.size();j++){c[i + j] += A[i] * B[j];// 处理进位if (c[i + j] >= 10){c[i + j + 1] += c[i + j] / 10;}c[i + j] %= 10;}}while(c.size() > 1 && c.back() == 0)c.pop_back();reverse(c.begin(), c.end());string ans;for (size_t i = 0; i < c.size(); i++){ans += c[i] + '0';}return ans;}
};

相关文章:

【C++初阶】值得一刷的字符串string相关oj题

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)

文章目录 10.1 构建微服务架构 - 探索 Go 语言的微观世界10.1.1 基础知识讲解10.1.2 重点案例&#xff1a;订单处理系统订单服务测试服务 10.1.3 拓展案例 1&#xff1a;用户认证服务安装所需的包实现用户模型和存储实现 JWT 生成和验证实现认证服务测试服务 10.1.4 拓展案例 2…...

代码随想录算法训练营第34天| Leetcode 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

文章目录 Leetcode 860.柠檬水找零Leetcode 406.根据身高重建队列Leetcode 452. 用最少数量的箭引爆气球 Leetcode 860.柠檬水找零 题目链接&#xff1a;Leetcode 860.柠檬水找零 题目描述&#xff1a; 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的…...

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习&#xff0c;这篇我将初步学习二叉树&#xff01;&#xff01;&#xff08;新年快乐&#xff01;&#xff09; 目录 二叉树 1、定义&#xff1a; 2、特点&#xff1a; 3、基本形态&#xff1a; 4、二叉树的种类&#xff1a; &…...

AI大模型学习笔记之四:生成式人工智能(AIGC)是如何工作的?

OpenAI 发布 ChatGPT 已经1年多了&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;也已经广为人知&#xff0c;我们常常津津乐道于 ChatGPT 和 Claude 这样的人工智能系统能够神奇地生成文本与我们对话&#xff0c;并且能够记忆上下文情境。 Midjunery和DALLE 这样的AI…...

bat脚本 创建计划任务 一分钟设置ntp同步周期为60s

要在Windows中使用批处理脚本&#xff08;.bat&#xff09;创建一个计划任务来每分钟同步一次NTP时间&#xff0c;你可以使用schtasks命令来创建计划任务。下面是一个示例脚本&#xff0c;展示了如何创建这样一个计划任务&#xff1a; echo off set "taskNameSyncNTP"…...

python数据分析numpy基础之mean用法和示例

1 python数据分析numpy基础之mean用法和示例 python的numpy库的mean()函数&#xff0c;用于计算沿指定轴(一个轴或多个轴)的算术平均值。 用法 numpy.mean(a, axisNone, dtypeNone, outNone, keepdims<no value>, *, where<no value>)描述 返回数组元素的平均值…...

微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…...

只允许访问固定网址,如何让电脑只能上指定的网站

在企业管理中&#xff0c;确保员工在工作时能够专注于指定的任务和资源至关重要。为了实现这一目标&#xff0c;许多企业选择限制员工电脑的访问权限&#xff0c;只允许他们访问固定的网址或网站。 这种策略不仅有助于提高工作效率&#xff0c;还能减少因不当上网行为带来的安全…...

作业帮 x TiDB丨多元化海量数据业务的支撑

导读 作业帮是一家成立于 2015 年的在线教育品牌&#xff0c;致力于用科技手段助力教育普惠。经过近十年的积累&#xff0c;作业帮运用人工智能、大数据等技术&#xff0c;为学生、老师、家长提供学习、教育解决方案&#xff0c;智能硬件产品等。随着公司产品和业务场景越来越…...

文生图提示词:天气条件

天气和气候 --天气条件 Weather Conditions 涵盖了从基本的天气类型到复杂的气象现象&#xff0c;为描述不同的天气和气候条件提供了丰富的词汇。 Sunny 晴朗 Cloudy 多云 Overcast 阴天 Partly Cloudy 局部多云 Clear 清晰 Foggy 雾 Misty 薄雾 Hazy 朦胧 Rainy 下雨 Showers …...

【nginx实践连载-3】发布VSTO应用

要使用 Nginx 发布 VSTO 应用程序&#xff0c;需要将 ClickOnce 发布文件夹部署到 Nginx 服务器上。以下是一些步骤&#xff1a; 将 ClickOnce 发布文件夹复制到 Nginx 服务器上。确认 Nginx 配置文件中有一个指向 ClickOnce 发布文件夹的位置块。确保Nginx 配置文件中启用了 …...

【前端工程化面试题】使用 webpack 来优化前端性能/ webpack的功能

这个题目实际上就是来回答 webpack 是干啥的&#xff0c;你对webpack的理解&#xff0c;都是一个问题。 &#xff08;1&#xff09;对 webpack 的理解 webpack 为啥提出 webpack 是啥 webpack 的主要功能 前端开发通常是基于模块化的&#xff0c;为了提高开发效率&#xff0…...

思迈特再获国家权威认证:代码自主率98.78%

日前&#xff0c;思迈特软件自主研发的商业智能与数据分析软件&#xff08;Smartbi Insight&#xff09;通过中国赛宝实验室&#xff08;工业和信息化部电子第五研究所&#xff09;代码扫描测试&#xff0c;Smartbi Insight V11版本扫描测得代码自主率为98.78%的好成绩&#xf…...

JavaScript排序

直接看代码 <table border"1" cellspacing"0"><thead class"tou"><tr><td>选择按钮</td><td>汽车编号</td><td>汽车图片</td><td>汽车系列名称</td><td>汽车能源</…...

【读书笔记】ICS设备及应用攻击(一)

工控系统通常是由互联设备所构成的大型复杂系统&#xff0c;这些设备包括类似于人机界面&#xff08;HMI&#xff09;、PLC、传感器、执行器以及其他使用协商好的协议进行相互通信的设备。所有交互背后的驱动力都是软件&#xff0c;软件为工控系统中几乎所有部分的运行提供支撑…...

网络原理(HTTP篇)

网络原理HTTP 前言HTTPHTTP的工作流程抓包工具抓取HTTP报文HTTP报文格式 请求报文具体细节首行URLURL的基本格式URL encode 方法 报头(header)HostContent-Length 和 Content-TypeUser-Agent&#xff08;UA&#xff09;RefererCookie&#xff08;重要&#xff09; 前言 如图&a…...

关于油封密封件你了解多少?

油封也称为轴封或旋转轴封&#xff0c;旨在防止设备中的润滑剂泄漏&#xff0c;并防止外部污染物进入机械。它们通常用于泵和电机等旋转设备&#xff0c;在固定部件和移动部件之间提供密封界面。 油封的有效性很大程度上取决于其材料。不同的材料具有不同程度的耐热性、耐压性…...

Leetcode 72 编辑距离

题意理解&#xff1a; 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 将word1转换为word2,可以进行三种操作&#xff1a;增、删、改&am…...

羊大师揭秘,如何挑选出好牧场的奶羊,该怎么看

羊大师揭秘&#xff0c;如何挑选出好牧场的奶羊&#xff0c;该怎么看 了解牧场的管理和环境&#xff1a;好的牧场应该有规范的管理制度&#xff0c;环境整洁&#xff0c;草场茂盛&#xff0c;为奶羊提供了充足的食物和良好的生活环境。在这样的牧场中&#xff0c;奶羊能够得到…...

手把手教你用ADS 2023设计433MHz低噪放大器(从DC分析到S参数,保姆级避坑指南)

从零开始用ADS 2023打造433MHz低噪声放大器&#xff1a;原理剖析与实战避坑指南 在物联网和无线通信设备爆发式增长的今天&#xff0c;433MHz频段因其良好的穿透性和适中的传输距离&#xff0c;成为智能家居、远程控制等场景的首选。而作为接收机前端的关键部件&#xff0c;低噪…...

第一卷第4章:接口而非实现编程

第一卷第4章:接口而非实现编程 目录介绍 00.先回答上篇思考题 0.1 上篇遗留三道题 0.2 云迁移6万行代码 0.3 五次反转补锅 0.4 灵魂五连问 01.从一个搬迁切入 1.1 上云搬迁案例...

Docker化部署KingbaseES V9:从镜像导入到开发版License激活实战

1. 为什么选择Docker部署KingbaseES V9&#xff1f; 在开发测试环境中&#xff0c;传统数据库安装方式往往需要耗费大量时间在环境配置和依赖解决上。我去年参与的一个政务云项目就遇到过这种情况&#xff1a;团队花了三天时间在不同操作系统的测试机上反复折腾依赖库&#xff…...

别再只调API了!深入XXL-Job时间轮源码,手把手带你搞懂任务触发与调度过期的那些坑

深入XXL-Job时间轮&#xff1a;从源码解析任务调度与过期处理的实战指南 在分布式任务调度领域&#xff0c;XXL-Job以其轻量级、易扩展的特性成为众多Java项目的首选方案。但当我们从简单的API调用者转变为架构设计者时&#xff0c;仅满足于配置层面的理解显然不够。本文将带您…...

【免费下载】 JIRA用户操作指南(详细版)

JIRA用户操作指南&#xff08;详细版&#xff09; 【下载地址】JIRA用户操作指南详细版 JIRA用户操作指南&#xff08;详细版&#xff09;欢迎使用JIRA用户操作指南&#xff0c;本指南旨在帮助您全面理解并高效地使用JIRA这一强大的问题跟踪与项目管理工具 项目地址: https:/…...

从沙子到车辙(1.3):图灵的答案

1.3 图灵的答案 那个跑步穿过剑桥的人 1935 年&#xff0c;剑桥大学国王学院。一个 23 岁的研究生躺在草地上&#xff0c;望着天空&#xff0c;想着一件事&#xff1a; 什么是"计算"&#xff1f; 他叫艾伦图灵&#xff08;Alan Turing&#xff09;。 这个年轻人…...

探索物联网通信新高度:STM32 MQTT协议功能实现

探索物联网通信新高度&#xff1a;STM32 MQTT协议功能实现 【下载地址】STM32MQTT协议功能实现分享 本仓库提供了一个资源文件&#xff0c;标题为“STM32 MQTT协议功能实现”。该资源文件包含了使用C语言实现的MQTT协议客户端功能&#xff0c;并且已经成功移植到STM32平台上。经…...

实测对比:百度OCR车牌识别在夜间、侧拍、模糊场景下的效果到底怎么样?

百度OCR车牌识别实战评测&#xff1a;夜间、侧拍与模糊场景下的真实表现 当停车场道闸自动抬起&#xff0c;交通卡口违章记录自动生成&#xff0c;这些看似简单的场景背后都依赖一项关键技术——车牌识别。作为计算机视觉领域的经典应用&#xff0c;车牌识别技术已经从实验室走…...

基于瞬态三角哈里斯鹰算法TTHHO实现多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 &#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &…...

从零打造专属机械键盘:基于CircuitPython的USB HID输入设备实践

1. 项目概述&#xff1a;打造你的专属“一键”键盘如果你对市面上千篇一律的键盘感到厌倦&#xff0c;或者一直想亲手制作一个独一无二的输入设备&#xff0c;那么这个项目就是为你准备的。今天&#xff0c;我们不谈那些复杂的全尺寸客制化键盘&#xff0c;而是从一个精巧、有趣…...