学习笔记—C++—string(练习题)

news/2025/5/22 2:17:02/

练习题

仅仅反转字母

917. 仅仅反转字母 - 力扣(LeetCode)

题目

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s 。

示例 1:

输入:s = "ab-cd"
输出:"dc-ba"

    示例 2:

    输入:s = "a-bC-dEf-ghIj"
    输出:"j-Ih-gfE-dCba"
    

      示例 3:

      输入:s = "Test1ng-Leet=code-Q!"
      输出:"Qedo1ct-eeLg=ntse-T!"
      

      提示

      • 1 <= s.length <= 100
      • s 仅由 ASCII 值在范围 [33, 122] 的字符组成
      • s 不含 '\"' 或 '\\'

      解题代码

      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) {if (S.empty())return S;size_t begin = 0, end = S.size() - 1;while (begin < end){while (begin < end && !isLetter(S[begin]))++begin;while (begin < end && !isLetter(S[end]))--end;swap(S[begin], S[end]);++begin;--end;}return S;}
      };

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

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

      题目

      给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

      示例 1:

      输入: s = "leetcode"
      输出: 0
      

      示例 2:

      输入: s = "loveleetcode"
      输出: 2
      

      示例 3:

      输入: s = "aabb"
      输出: -1
      

      提示:

      • 1 <= s.length <= 105
      • s 只包含小写字母

      解题代码

      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;}
      };

      字符串相加

      415. 字符串相加 - 力扣(LeetCode)

      题目

      给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

      你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

      示例 1:

      输入:num1 = "11", num2 = "123"
      输出:"134"
      

      示例 2:

      输入:num1 = "456", num2 = "77"
      输出:"533"
      

      示例 3:

      输入:num1 = "0", num2 = "0"
      输出:"0"
      

      提示:

      • 1 <= num1.length, num2.length <= 104
      • num1 和num2 都只包含数字 0-9
      • num1 和num2 都不包含任何前导零

      解题思路

      直接创建一个两个字符串最大长度加一个空间

      创建两个函数分别指向两个字符串的最后一个字符

      创建字符串接收结果

      创建一个函数用来存储进位

      如果end1、end2位置字符大于等于0,那么就减字符0把它变成整型值,前挪减减,如果字符串没有了那么给0

      创建ret存储两个加的结果再加进位next

      进位next就储存ret除10所得的数

      个位:ret磨10的结果      如:13磨10得3,3就是个位

      字符串+=接收ret+字符0的数

      出了循环只剩next为1,那么str接收的值就为1     如:3+7=10,next就为1,ret为0,不加的话就返回0,加它之后就结果为10

      由于是尾插所以数是反的,那么调用reverse头尾交换

      最后返回str

      解题代码

      class Solution {
      public:string addStrings(string num1, string num2) {int end1=num1.size()-1,end2=num2.size()-1;string str;int next=0;while(end1>=0 || end2>=0){int x1 = end1 >= 0 ?num1[end1--]-'0' :0;int x2 = end2 >= 0 ?num2[end2--]-'0' :0;int ret= x1+x2+next;next = ret/10;ret = ret%10;str+=('0'+ret);}if(next==1)str+='1';reverse(str.begin(),str.end());return str;}
      };

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

      字符串最后一个单词的长度_牛客题霸_牛客网

      题目

      描述

      对于给定的若干个单词组成的句子,每个单词均由大小写字母混合构成,单词间使用单个空格分隔。输出最后一个单词的长度。

      输入描述

      在一行上输入若干个字符串,每个字符串代表一个单词,组成给定的句子。
      除此之外,保证每个单词非空,由大小写字母混合构成,且总字符长度不超过 103103 。

      输出描述:

      在一行上输出一个整数,代表最后一个单词的长度。

      示例1

      输入:

      HelloNowcoder

      输出:

      13

      说明:

      在这个样例中,最后一个单词是 "HelloNowcoder""HelloNowcoder" ,长度为 1313 。

      示例2

      输入:

      A B C D

      输出:

      1

      解题代码

      #include<iostream>
      #include<string>
      using namespace std;
      int main()
      {string str;// 不要使用cin>>line,因为会它遇到空格就结束了// while(cin>>line)getline(cin, str);size_t pos = str.rfind(' ');cout << str.size() - (pos + 1) << endl;return 0;
      }

      验证一个字符串是否是回文

      125. 验证回文串 - 力扣(LeetCode)

      题目

      如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

      字母和数字都属于字母数字字符。

      给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

      示例 1:

      输入: s = "A man, a plan, a canal: Panama"
      输出:true
      解释:"amanaplanacanalpanama" 是回文串。
      

      示例 2:

      输入:s = "race a car"
      输出:false
      解释:"raceacar" 不是回文串。
      

      示例 3:

      输入:s = " "
      输出:true
      解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
      由于空字符串正着反着读都一样,所以是回文串。
      

      提示:

      • 1 <= s.length <= 2 * 105
      • s 仅由可打印的 ASCII 字符组成

      解题代码

      class Solution {
      public:bool isLetterOrNumber(char ch){return (ch >= '0' && ch <= '9')|| (ch >= 'a' && ch <= 'z')|| (ch >= 'A' && ch <= 'Z');}bool isPalindrome(string s) {// 先小写字母转换成大写,再进行判断for (auto& ch : s){if (ch >= 'a' && ch <= 'z')ch -= 32;}int begin = 0, end = s.size() - 1;while (begin < end){while (begin < end && !isLetterOrNumber(s[begin]))++begin;while (begin < end && !isLetterOrNumber(s[end]))--end;if (s[begin] != s[end]){return false;}else{++begin;--end;}}return true;}
      };


      http://www.ppmy.cn/news/1608354.html

      相关文章

      5 matplotlib样式和颜色设置

      一、绘图样式&#xff08;style&#xff09; 在matplotlib中&#xff0c;设置绘图样式有多种方式&#xff0c;适合不同场景的需求。主要方法如下&#xff1a; 预定义样式 matplotlib提供了多个内置样式&#xff0c;可以通过plt.style.use()进行调用&#xff0c;常见的样式有de…

      DSN主从同步

      一、DSN域名 在DNS域名系统中&#xff0c;每个域分别由不同的组织进行管理。每个组织都可以将自己负责的域再分成一定数目的子域&#xff0c;并将这些子域委托给其他组织去管理。 域名服务器的类型树状图&#xff1a; 二、DNS域名解析过程 1、DNS解析概述 DNS解析是将域名转换…

      人形机器人马拉松:北京何以孕育“领跑者”?

      “机器人每跑一小步&#xff0c;都是人类科技的一大步”&#xff0c;这句对阿姆斯特朗登月名言的仿写&#xff0c;恰如其分地诠释了全球首场人形机器人半程马拉松赛事的里程碑意义。 2025年4月19日&#xff0c;北京亦庄半程马拉松暨人形机器人半程马拉松圆满结束。在总长21.09…

      柱状图QCPBars

      一、QCPBars 概述 QCPBars 是 QCustomPlot 中用于绘制柱状图/条形图的类&#xff0c;支持单组或多组柱状图显示&#xff0c;可自定义宽度、颜色和间距等属性。 二、主要属性 属性类型描述widthdouble柱子的宽度&#xff08;坐标轴单位&#xff09;widthTypeWidthType宽度计算…

      select、poll、epoll实现多路复用IO并对比差异

      目录 一、select实现多路复用 1.select函数介绍 2.select优缺点 3.select使用示例 二、poll实现多路复用 1.poll函数介绍 2.poll优缺点 3.poll使用示例 三、epoll实现多路复用 1.epoll函数介绍 2.epoll工作原理 3.epoll工作模式 (1)水平触发LT模式 (2)边缘触发ET模…

      清理C盘组合拳:最高释放空间80GB+

      分享一套系统化的C盘清理方案&#xff0c;涵盖从基础清理到深度优化的8个关键步骤&#xff0c;结合安全性与效率&#xff0c;可快速释放5-50GB空间&#xff1a; 一、精准定位空间占用源&#xff08;必备工具&#xff09; 空间可视化分析 使用 TreeSize Free 或 WizTree 扫描C…

      用P0口控制LED(STC89C52单片机)

      #include <reg52.h> sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; void main() { ENLED 0; ADDR3 1; ADDR2 1; ADDR1 1; ADDR0 0; P0 0xFE; //向P0写入数据来控制LED小灯 while …

      acwing--动态规划【线性dp】4/20

      1、数字三角形898. 数字三角形 - AcWing题库 涉及i-1一般初始化从1开始 考虑最后一行的数据&#xff1a;f[i][j] max( f[i-1][j]右上角&#xff0c;f[i-1][j-1]左上角) 注意&#xff1a;1、#include<climits>可以定位INT_MAX&#xff0c;不过还可以用1e9&#xff0c;…