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

news2025/1/22 17:59:37

在这里插入图片描述

👦个人主页:@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) 
    {
        // 间隔2k
        for (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;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1454746.html

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

相关文章

二.重新回炉Spring Framework:Spring Framework主要组件概览

1.写在前面的话 这里主要简单说一下Spring Framework的几个核心组件的总体情况。为了比较直观&#xff0c;这里使用了ClassPathXmlApplicationContext的类图来进行说明。它基本上包含了 IoC 体系中大部分的核心类和接口。类图如下图所示&#xff1a; 2.Resource 组件体系 R…

项目管理软件品牌榜:行业领导者与热门选择

大数据、人工智能等新兴技术的崛起&#xff0c;各种行业在数字化转型的过程中&#xff0c;越来越注重有效的项目管理和协作方式。而各种项目管理软件应运而生&#xff0c;以帮助企业提高效率、降低成本、提高协作性。然而在众多的项目管理软件市场上&#xff0c;如何选择适合自…

PCIe TX端电容

一、问题&#xff1a;PCIe为什么要加电容 PCIe为什么要加电容&#xff1f;具体的作用是什么&#xff1f; 答&#xff1a;因为PCIe Host和Receiver两端的直流偏置会不一样&#xff0c;所以需要在PCIe的传输路径上加电容&#xff0c;这样传输路径上只有AC信号&#xff0c;不存在…

小白如何学鸿蒙开发?

在互联网技术不断发展的现在&#xff0c;鸿蒙操作系统的出现标志着是能技术领域的一次重大突破&#xff0c;鸿蒙作为华为推出的一代操作系统&#xff0c;鸿蒙不仅达代表了自主创新的力量&#xff0c;还因为独特的分布式架构和全场景适配能力而备受关注。随着鸿蒙生态的不断完善…

机器学习 | 实现图像加密解密与数字水印处理

目录 实现窗口可视化 数字图像加密 窗口布局设置 基于混沌Logistic的图像加密 基于三重DES的图像加密 数字图像解密 窗口布局设置 基于混沌Logistic的图像解密 基于三重DES的图像解密 基于LSB的数字水印提取 窗口布局设置 水印的嵌入与提取 实现窗口可视化 这里…

【C++】类与对象【定义、访问限定符、this指针】

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 面向过程和面向对象初步认识 类的引入 类的定义 成员变量命名规则的建议&#xff1a; 类的访问限定符及…

代码随想录刷题笔记 DAY 29 | 非递减子序列 No.491 | 全排列 No.46 | 全排列 II No. 47

文章目录 Day 2901. 非递减子序列&#xff08;No. 491&#xff09;1.1 题目1.2 笔记1.3 代码 02. 全排列&#xff08;No. 46&#xff09;2.1 题目2.2 笔记2.3 代码 03. 全排列 II&#xff08;No. 47&#xff09;3.1 题目3.2 笔记3.3 代码 Day 29 01. 非递减子序列&#xff08;…

Spring Boot打war包部署到Tomcat,访问页面404 !!!

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 Spring Boot打war包部署到Tomcat&#xff0c;访问页面404 &#xff01;&#xff01;&#xff01;解决办法&#xff1a;检查Tomcat版本和Jdk的对应关系&#xff0c;我的Tomcat是6.x&#x…

C语言系列-预定义符号#define定义宏#define定义宏

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 目录 预定义符号 #define定义常量 #define定义宏 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的。 __FILE__ /…

渗透测试练习题解析 4(CTF web)

1、[GXYCTF2019]禁止套娃 1 考点&#xff1a;git 泄露 进入靶场后只有一串文字&#xff0c;源代码、抓包之类的都没有敏感信息出现&#xff0c;直接用 kali 的 dirsearch 扫描 发现存在 .git 目录&#xff0c;猜测应该是源码泄露&#xff0c;使用 GitHack 扒一下源码&#xff0…

第13章 网络 Page747~749 asio核心类 ip::tcp::resolver

3&#xff0c; ip::tcp::resolver 如果新浪的IP地址变了&#xff0c;该怎么办呢? ip::tcp::resolver 可以帮我们用上www.sina.com.cn&#xff0c;因为它负责将人类可读的多种网址信息&#xff0c;一步 到位地解析成ip::tcp::socket建立连接所需要的ip::tcp::endpoint结构&…

【FastAPI】P1 安装与第一个 FastAPI 应用

目录 FastAPI 安装第一个 FastAPI 应用代码拆解分析 FastAPI 安装 FastAPI 是用于快速构建 API 的 web 框架&#xff0c;依赖 Python 3.8 及更高版本。使用 pip 命令安装 fastapi&#xff1a; pip install fastapi安装异步处理 ASGI 的服务器 Uvicorn&#xff1a; pip insta…

pipx — 在隔离环境中安装和运行 Python 应用程序

pipx官网&#xff1a; https://pipx.pypa.io/stable/ pipx pipx 是一个用于安装和运行Python应用程序的工具&#xff0c;它类似于 Linux的 apt 和JavaScript 的 npx 。 pipx和pip的区别&#xff1a; pip是一个通用的python包安装工具pipx专注于安装python cli程序 cli&#…

Web 扫描神器:WhatWeb 保姆级教程(附链接)

一、介绍 WhatWeb 是一款用于识别网站技术栈和特征的开源Web扫描工具。它可以自动分析网站的响应并识别出使用的Web框架、CMS、服务器、JavaScript库等技术组件。WhatWeb的目标是通过分析网站的内容&#xff0c;提供有关目标的技术信息&#xff0c;这对于安全测试、漏洞评估和…

移动云云桌面应用场景广泛,助力行政、教育等领域的办公转型

当今办公场景&#xff0c;远程办公和视频会议逐渐常态化&#xff0c;但是在实际应用过程中都需要PC设备的支持&#xff0c;当然还有很多其他的场景也是如此。为了满足使用要求&#xff0c;我们走到哪里就需要把设备带到哪里&#xff0c;非常不方便。那么&#xff0c;有没有一种…

javaSpringbootmysql大学生综合素质测评系统65290-计算机毕业设计项目选题推荐(附源码)

摘 要 本论文主要论述了如何使用java语言开发一个Springboot大学生综合素质测评系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。本文将论述大学生综合素质测评系统的当前背景以及系统开发的…

代码随想录算法训练营第54天 | 123.买卖股票的最佳时机III + 188.买卖股票的最佳时机IV

今日任务 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV 123.买卖股票的最佳时机III - Hard 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。…

【详解】图的概念和存储结构(邻接矩阵,邻接表)

目录 图的基本概念&#xff1a; 图的存储结构 邻接矩阵&#xff08;GraphByMatrix&#xff09;&#xff1a; 基本参数&#xff1a; 初始化&#xff1a; 获取顶点元素在其数组中的下标 &#xff1a; 添加边和权重&#xff1a; 获取顶点的度&#xff1a; 打印图&#xf…

前端vue金额用逗号分隔

实现效果 代码 template部分 <el-input v-model"state.val"></el-input><div>{{ priceFor(state.val) }}</div> js部分 const state reactive({ val: });const priceFor (val)> {if(!val){return }else if(val.length<4){return…

LDM:High-Resolution Image Synthesis with Latent Diffusion Models

LDM: High-Resolution Image Synthesis with Latent Diffusion Models TL; DR&#xff1a;关键的技术点有两个。一是通过感知压缩将 Diffusion 从像素空间的转换到隐空间来做&#xff0c;降低训练/采样的算力成本&#xff0c;提高生成质量。二是通过交叉注意力&#xff0c;将各…