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

news2025/4/21 12:02:40

练习题

仅仅反转字母

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.coloradmin.cn/o/2339408.html

      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

      相关文章

      [Swift]Xcode模拟器无法请求http接口问题

      1.以前偷懒一直是这样设置 <key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/><key>NSAllowsArbitraryLoadsInWebContent</key><true/> </dict> 现在我在Xcode16.3上&#xff…

      返回之术:用 navigate(-1) 闯荡前端江湖

      前言 在前端这片江湖,页面跳转宛如轻功水上漂,来去无踪,飘忽不定。但其中有一门绝学,专治“回头是岸”之需求,那便是 React Router 中的 navigate(-1) 身法。 昔日我闯荡项目林,误入“下一页”禁地,一脚踏空,身陷页面迷阵。正当我焦头烂额之际,师父袖袍一挥,口吐一…

      网络编程3

      day3 一、服务器模型 1.循环服务器模型 同一个时刻只能响应一个客户端的请求 2.并发服务器模型 2.1含义 同一个时刻可以响应多个客户端的请求&#xff0c;常用的模型有多进程模型/多线程模型/IO多路复用模型。 2.2多进程模型 每来一个客户端连接&#xff0c;开一个子进程来专门…

      海拔与大气压关系,大气压单位,气压传感器对比

      mbmbar 毫巴(百帕) mbar 毫巴(百帕) hPa 百帕 1百帕1毫巴3/4毫米水银柱 1Kpa10百帕7.5毫米汞柱7.5mmhg 1Bar0.1MPa1000mba1000hpa100*7.5mmhg75mmhg1个大气压 HP303B HP303S HP203N BMP280

      Linux 进程概念补充 (自用)

      进程概念 内核进程进程状态内存泄漏进程调度。Linux真实调度算法环境变量 内核 狭义上的操作系统指的是 内核就是进程管理进程调度&#xff0c;文件系统等等。 广义上的操作系统其实在外壳指令这些。封装了系统调用的东西。 进程 课本概念程序的一个基本实例 内核观点&#…

      PyTorch - Tensor 学习笔记

      上层链接&#xff1a;PyTorch 学习笔记-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接从数据创建张量。数据类型是自动推断的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])输出&am…

      Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”

      文章目录 前言✅ 为什么 Boolean 字段显示为 [ ]&#xff1f;✅ 如何验证实际数据类型&#xff1f;✅ 小结 前言 看到的 deleted: [ ] 并不是 Prisma 的问题&#xff0c;而是数据库客户端&#xff08;如 Navicat、DataGrip、DBeaver&#xff09;在渲染 BOOLEAN 类型字段时的一种…

      基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解

      文章目录 前言一、实现步骤1. 项目初始化2. 准备GeoJson数据3. 创建地图组件4. 创建主页面组件5. 使用组件 二、功能亮点三、性能优化建议四、常见问题解决五、结语六、实战demo七、资源下载 前言 在数据可视化领域&#xff0c;地图展示是一种非常直观的表现形式。而地图钻取&…

      安卓学习24 -- 网络

      1 整体架构 &#xff08;出处见水印&#xff09; 这两张是能找到的比较清楚的图。目前可以看出&#xff0c;底层的网络业务&#xff0c;还是传统的linux内核提供。&#xff08;注&#xff1a;这两个图我个人觉得不是非常对。。。&#xff09; 在安卓上增加的两个比较重要的部…

      github新建一个远程仓库并添加了README.md,本地git仓库无法push

      1.本地git仓库与远程仓库绑定 2.push时报错&#xff0c;本地的 main 分支落后于远程仓库的 main 分支&#xff08;即远程有更新&#xff0c;但你本地没有&#xff09;&#xff0c;需要拉取远程的仓库--->在merge合并&#xff08;解决冲突&#xff09;--->push 3.但是git …

      Python:使用web框架Flask搭建网站

      Date: 2025.04.19 20:30:43 author: lijianzhan Flask 是一个轻量级的 Python Web 开发框架&#xff0c;以简洁灵活著称&#xff0c;适合快速构建中小型 Web 应用或 API 服务。以下是 Flask 的核心概念、使用方法和实践指南 Flask 的核心特点&#xff1a; 轻量级 核心代码仅约…

      Kotlin delay方法解析

      本文记录了kotlin协程(Android)中delay方法的字节码实现&#xff0c;并解析了delay方法如何实现挂起操作。 一、delay方法介绍 1.1、delay方法使用举例 class TestDelay {suspend fun testDelay() {Log.d("TestDelay", "before delay")delay(1000)Log.d…

      【Vulkan 入门系列】创建描述符集布局和图形管线(五)

      描述符集布局定义了着色器如何访问资源&#xff08;如缓冲区和图像&#xff09;&#xff0c;是渲染管线配置的关键部分。图形管线定义了从顶点数据到最终像素输出的整个处理流程&#xff0c;包括可编程阶段&#xff08;如顶点和片段着色器&#xff09;和固定功能阶段&#xff0…

      mysql中in的用法详解

      MySQL 中 IN 操作符用法详解 IN 是 MySQL 中用于多值筛选的高效操作符&#xff0c;常用于 WHERE 子句&#xff0c;可替代多个 OR 条件&#xff0c;简化查询逻辑并提升可读性。以下从基础语法、应用场景、性能优化、常见问题及高级技巧进行全方位解析。 一、基础语法与优势 1.…

      MySQL为什么默认使用RR隔离级别?

      大家好&#xff0c;我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助&#xff1b; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR&#xff08;Repeatable Read&#xff09;…

      施磊老师基于muduo网络库的集群聊天服务器(二)

      文章目录 Cmake简单介绍Cmake与MakefileCmake配置CmakeLists.txt 编写完整cmake例子文件夹杂乱问题多级目录Cmakevscode 极其推荐 的 cmake方式 Mysql环境与编程mysql简单使用User表Friend表AllGroup表GroupUser表OfflineMessage表 集群聊天项目工程目录创建网络模块代码Chatse…

      线性DP:最长上升子序列(子序列可不连续,子数组必须连续)

      目录 Q1&#xff1a;简单遍历 Q2&#xff1a;变式&#xff08;加大数据量&#xff09; Q1&#xff1a;简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 &#xff08;其实质是集合的划分&#xff09;…

      C语言之文本加密程序设计

      &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 文本加密程序设计 摘要&#xff1a;本文设计了一种文本加密程序&#xff0c;旨在提高信息安…

      云效部署实现Java项目自动化部署图解

      前言 记录下使用云效部署Java项目&#xff0c;实现java项目一键化自动化部署。 云效流程说明&#xff1a; 1.云效拉取最新git代码后 2.进行maven编译打包后&#xff0c;上传到指定服务器目录 3.通过shell脚本&#xff0c;先kill java项目后&#xff0c;通过java -jar 启动项…

      0801ajax_mock-网络ajax请求1-react-仿低代码平台项目

      0 vite配置proxy代理 vite.config.ts代码如下图所示&#xff1a; import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…