前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C++修行之道】string类练习题

【C++修行之道】string类练习题

作者头像
走在努力路上的自己
发布于 2024-07-13 00:41:33
发布于 2024-07-13 00:41:33
13200
代码可运行
举报
运行总次数:0
代码可运行

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

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

给定一个字符串 s ,找到它的第一个不重复的字符,并返回它的索引

如果不存在,则返回 -1

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: s = "leetcode"
输出: 0

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: s = "loveleetcode"
输出: 2

示例 3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: s = "aabb"
输出: -1

提示:

  • 1 <= s.length <= 105
  • s 只包含小写字母
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
};
  • ch - 'a' 计算字符 ch 相对于字符 'a' 的位置索引。例如,字符 'a' 的位置为 0,字符 'b' 的位置为 1,依此类推。
  • count[ch - 'a']++ 表示将 count 数组中相应位置的值加 1,从而记录字符 ch 出现的次数。
  • count[s[i] - 'a'] == 1 检查字符 s[i] 是否在字符串 s 中只出现了一次。如果是,则返回该字符的索引 i

125. 验证回文串

验证回文串 - 力扣(LeetCode)

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

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

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

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入: s = "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "race a car"
输出:false
解释:"raceacar" 不是回文串。

示例 3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。

提示:

  • 1 <= s.length <= 2 * 105
  • s 仅由可打印的 ASCII 字符组成
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
	}
};
  • while (begin < end) 循环确保指针交替向中间移动,直到它们相遇或交错。
  • while (begin < end && !isLetterOrNumber(s[begin])) ++begin; 跳过非字母数字字符,移动 begin 指针向右。
  • while (begin < end && !isLetterOrNumber(s[end])) --end; 跳过非字母数字字符,移动 end 指针向左。
  • 如果 s[begin] != s[end],即对应字符不相等,返回 false,表示字符串不是回文串。
  • 如果对应字符相等,继续移动指针 begin 向右,end 向左。

917. 仅仅反转字母

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

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

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

返回反转后的 s 。

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "ab-cd"
输出:"dc-ba"

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"

示例 3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"

提示:

  • 1 <= s.length <= 100
  • s 仅由 ASCII 值在范围 [33, 122] 的字符组成
  • s 不含 '\"' 或 '\\'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
	}
};
  • reverseOnlyLetters 函数接收一个字符串 S,并返回一个仅反转字母部分的字符串。
  • 首先检查字符串是否为空,如果是,则直接返回原字符串。
  • 使用 while (begin < end) 循环确保指针交替向中间移动,直到它们相遇或交错。
  • while (begin < end && !isLetter(S[begin])) ++begin; 跳过非字母字符,移动 begin 指针向右。
  • while (begin < end && !isLetter(S[end])) --end; 跳过非字母字符,移动 end 指针向左。
  • swap(S[begin], S[end]); 交换 beginend 指针指向的字母。
  • 继续移动指针 begin 向右,end 向左。
  • beginend 指针相遇或交错时,返回反转后的字符串 S

415. 字符串相加(重点)

字符串相加 - 力扣(LeetCode)

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

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

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:num1 = "0", num2 = "0"
输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1num2 都只包含数字 0-9
  • num1num2 都不包含任何前导零
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string addStrings(string num1, string num2) {
        int end1 = num1.size() - 1;
        int 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 x = x1 + x2 + next;

            // 处理进位
            next = x / 10;
            x = x % 10;
            
            // 头插
            // str.insert(0, 1, '0'+x);
            str.insert(str.begin(), '0'+x);
        }
        // 还有一个进位没处理
        if(next == 1)
        {
            str.insert(str.begin(), '1');
        }  
        return str;
    }
};
  • while (end1 >= 0 || end2 >= 0) 循环确保我们遍历两个字符串,直到两个字符串都处理完毕。
  • x1x2 分别是当前字符对应的数字,如果对应的字符已经处理完毕,则赋值为 0
  • x 是当前位相加的结果,包括进位 next
  • next = x / 10 计算新的进位值。
  • x = x % 10 计算当前位的实际数字。
  • str.insert(str.begin(), '0' + x) 将当前位的结果插入到结果字符串的头部。
  • end1--end2-- 将指针分别向前移动一位。
  • 如果循环结束后还有进位,则在结果字符串的头部插入 '1'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string addStrings(string num1, string num2) {
        int end1 = num1.size() - 1;
        int 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 x = x1 + x2 + next;

            // 处理进位
            next = x / 10;
            x = x % 10;
            
            // 尾插
            str += ('0' + x);
        }
        // 还有一个进位没处理
        if(next == 1)
        {
            str += '1';
        }  
        
        reverse(str.begin(), str.end());

        return str;
    }

541. 反转字符串 II

541. 反转字符串 II

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
输入:s = "abcd", k = 2
输出:"bacd"

提示:

1 <= s.length <= 10000 s 仅由小写英文组成 1 <= k <= 10000

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.length();
        for(int i = 0; i < n; i += 2 * k)
            reverse(s.begin() + i, s.begin() + min(i + k, n));
        return s;
    }
};

今天就先到这了!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
安装Consul集群
TIPS •本文基于Consul 1.5.3,理论适用于Consul 1.6及更低版本。•安装单机版Consul详见:《安装单机版Consul》
用户1516716
2019/12/23
1.7K0
学习搭建 Consul 服务发现与服务网格-有丰富的示例和图片
那么,我们对 Consul 的理解,就是服务网格、服务发现,官网文档说的这两个特征,到底是啥意思?跨什么云?
痴者工良
2021/04/26
9840
consul微服务治理中心踩坑
本工程完整演示了以consul为微服务治理中心的标准微服务架构各个基本模块功能,通过该项目能够完整了解微服务注册、发现、健康监测、负载均衡、全链路监控、配置中心、权限控制等。
IT运维技术圈
2022/06/26
9110
consul微服务治理中心踩坑
linux上安装consul 原
    官网上下载consul,下载地址是https://www.consul.io/downloads.html,根据不同操作系统选中不同的版本。
克虏伯
2019/04/15
1.6K0
linux上安装consul
                                                                            原
Consul 集群2
此时已经分别在104和103上启动了两个代理a1和a2,a1准备用来作server ,a2用来作client,但它们彼此还互不认识,都是自己的单节点集群中的唯一节点,可以通过 consul members 来进行查看
franket
2021/12/01
3840
微服务 - 搭建Consul集群服务,Consul配置中心
传统配置文件的弊端 静态化配置,例如env文件 配置文件无法区分环境 配置文件过于分散 历史版本无法查看 配置中心如何解决的呢?配置中心的思路是把项目中的配置参数全部放在一个集中的地方来管理,并提供一
stark张宇
2023/04/22
7820
Spring Cloud Consul入门 1. Consul介绍2. 安装3. 启动Consul4. 使用SpringCloud Consul组件
Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用。Consul是HashiCorp( Vagrant的创建者)开发的一个服务发现与配置项目,用Go语言开发,基于 Mozilla Public License 2.0 的协议开源。
mantou
2019/02/13
1.2K0
Spring Cloud Consul入门
		1. Consul介绍2. 安装3. 启动Consul4. 使用SpringCloud Consul组件
Consul部署
默认Policy:global-management,这个是拥有最高权限的SecretID,等于超级管理员
陳斯托洛夫斯記
2022/10/27
6960
Consul部署
微服务Consul系列之服务部署、搭建、使用
以上只是列举的笔者曾经遇到的几点问题,当然问题还不止于这些,下面介绍的Consul可以有效解决这些问题,当然还有一些其它的优点,让我们一起期待下文的Consul的讲解。
五月君
2019/07/12
1.6K0
微服务Consul系列之服务部署、搭建、使用
Kubernetes中Consul重启自动加入集群实践
近期频繁的容器母机调整导致我们的业务需要多次重启,不得不寻找一种自动重建Consul集群的方式。在网上搜索和学习一番后发现,基本没有针对Kubernetes容器环境的自动重建方案。
sherlock99
2018/08/02
1.8K0
Consul v1.18.0集群搭建
Consul 是一种用于服务发现、配置和分布式一致性的开源工具和平台。它由 HashiCorp 公司开发和维护,旨在简化构建和维护分布式系统的任务。
全栈工程师熊明才
2024/03/29
4383
Consul v1.18.0集群搭建
基于consul的Redis高可用方案
这几天在研究如何做Redis的高可用容灾方案,查询了资料和咨询DBA同行,了解到Redis可以基于consul和sentinel实现读写分离以及HA高可用方案。本文讲述基于consul的Redis高可用方案实践。
用户1278550
2018/08/09
3K0
Consul 启动命令,Web UI
-bootstrap:启动模式,此模式下,节点可以选举自己为leader,一个数据中心只能有一个此模式启动的节点。机群启动后,新启动的节点不建议使用这种模式。
WindWant
2020/09/11
4.6K0
微服务Consul系列之集群搭建
在上一篇中讲解了Consul的安装、部署、基本的使用,使得大家有一个基本的了解,本节开始重点Consul集群搭建,官方推荐3~5台Server,因为在异常处理中,如果出现Leader挂了,只要有超过一半的Server还处于活跃状态,consul就会重新选举新的Leader,保证集群可以正常工作。
五月君
2019/07/12
1.2K0
微服务Consul系列之集群搭建
Consul初探-从安装到运行
伟大领袖毛主席说过:实践是检验真理的唯一标准!经过上一篇的学习,我基本掌握了 Consul 的基本原理,接下来就是动手实践了;Consul 的部署方式分为两种,分别是二进制包和docker方式,这次就以二进制包的方式进行实验吧。
梁规晓
2019/07/09
7560
Consul初探-从安装到运行
Consul安装和初步使用
如果上述安装方式出现了consul not be found的错误,说明环境变量PATH没有配置正确,请返回检查consul安装路径是否包含在PATH中。
AsiaYe
2019/11/06
1.5K0
Consul安装和初步使用
Consul 入门教程
微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。这里我只是简单的提一下,毕竟这不是我们的重点。我们看下面的一幅图片:
菲宇
2019/06/12
48.1K1
Consul 入门教程
Consul 集群部署
默认Policy:global-management,这个是拥有最高权限的SecretID,等于超级管理员
陳斯托洛夫斯記
2024/08/07
760
Consul 集群部署
Prometheus 通过 consul 分布式集群实现自动服务发现
本次演示环境,我是在虚拟机上安装 Linux 系统来执行操作,以下是安装的软件及版本:
哎_小羊
2020/04/08
2.2K0
Prometheus 通过 consul 分布式集群实现自动服务发现
Consul 基础3
每一个数据中心必须有至少一个服务节点,3到5个服务节点最好,非常不建议只运行一个服务节点,因为在节点失效的情况下数据有极大的丢失风险
franket
2021/12/01
2670
相关推荐
安装Consul集群
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档