【C++】OJ习题(初阶)

news2024/11/30 2:35:03
头像
🚀个人主页:奋斗的小羊
🚀所属专栏:C++
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

  • 💥1、字符串
    • 💥1.1 字符串相加
    • 💥1.2 验证回文字符串
    • 💥1.3 反转字符串
    • 💥1.4 字符串最后一个单词的长度
    • 💥1.5 字符串中的第一个唯一字符
    • 💥1.6 反转字符串中的单词
  • 总结


💥1、字符串

💥1.1 字符串相加

  • Leetcode——字符串相加

请添加图片描述

有时候我们需要非常大的数据相加时,整型的范围不够,就可以将数据转换为字符串的形式运算,再将结果转回为整型。
整型相加时是从后往前加的,这里的字符串相加我们也从后往前加。不断取出两个字符串的末尾字符,转换为整形后相加,再用+=追加到字符串末尾,其中还要考虑进位的情况。
因为string类支持operator[],所以我们可以通过下标的方式遍历字符串。
其中两个字符串的第一位相加也可能有进位,所以循环结束后还需要判断进位是否为1。
因为我们是从后往前加的,所以最后还需要用reverse将字符串翻转过来。

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

用下标的方式从后往前遍历字符串,相加得到的值追加到字符串,最后再反转字符串。


💥1.2 验证回文字符串

  • Leetcode——验证回文串

在这里插入图片描述

将字符串存到一个stack和一个queue中,循环比较top(),当栈和队列为空时则字符串回文,当某次top()不相等时则不回文。
范围for遍历字符串,如果是符合我们要求的字符就插入栈和队列中。

class Solution {
public:
    bool isPalindrome(string s) {
        for (auto e : s)
        {
            if (e >= 'a' && e <= 'z')
            {
                _st.push(e);
                _qu.push(e);
            }
            if (e >= 'A' && e <= 'Z')
            {
                e += 32;
                _st.push(e);
                _qu.push(e);
            }
            if (e >= '0' && e <= '9')
            {
                _st.push(e);
                _qu.push(e);
            }
        }
        while (!_st.empty())
        {
            if (_st.top() != _qu.front())
            {
                return false;
            }
            _st.pop();
            _qu.pop();
        }
        return true;
    }
private:
    stack<int> _st;
    queue<int> _qu;
};

💥1.3 反转字符串

  • Leetcode——反转字符串

在这里插入图片描述

只需要反转对应的区间就行,注意不能越界。

class Solution {
public:
    string reverseStr(string s, int k) {
        for (size_t i = 0; i < s.size(); i += 2*k)
        {
            size_t n = i + k > s.size() ? s.size() : i + k;
            reverse(s.begin() + i, s.begin() + n);
        }
        return s;
    }
};

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

  • 牛客——最后一个单词的长度

在这里插入图片描述

#include <iostream>
using namespace std;

int main() {
    string s;
    getline(cin, s);
    size_t pos = s.rfind(" ");
    size_t length = s.size() - pos - 1;
    cout << length << endl;
}

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

  • Leetcode——字符串中的第一个唯一字符

在这里插入图片描述

这种类似计数的题可以用哈希映射的方法,首先定义一个用于计数的数组,然后将字符串映射到数组中,再通过遍历字符串得到下标间接遍历数组来找出为1的元素,返回下标。
定义数组时需要初始化为全0。

class Solution {
public:
    int firstUniqChar(string s) {
        int arr[26] = {0};
        for (auto e : s)
        {
            arr[e - 'a']++;
        }
        for (size_t i = 0; i < s.size(); i++)
        {
            if (1 == arr[s[i] - 'a'])
            {
                return i;
            }
        }
        return -1;
        }
};

💥1.6 反转字符串中的单词

  • Leetcode——反转字符串中的单词

在这里插入图片描述
reverse(s.begin(), s.end());
参数:双向迭代器,指向要反转的序列的初始和最终位置。使用的范围是[ )左闭右开。
从前往后遍历字符串,找" "空格的位置,用reverse反转单词。需要注意的是reverse的参数是左闭右开的。

class Solution {
public:
    string reverseWords(string s) {
        int pos1 = 0;
        int pos2 = s.find(" ", pos1);
        while (pos2 < s.size())
        {
            reverse(s.begin() + pos1, s.begin() + pos2);
            pos1 = pos2 + 1;
            pos2 = s.find(" ", pos1);
        }
        reverse(s.begin() + pos1, s.end());
        return s;
    }
};

总结

  1. 首先要认真审题,有思路了切不可着急写,先在心中推敲一下看当前思路是否可行,有大概的把握了再着手实现
  2. 不要太钻牛角尖,如果某个思路迟迟实现不了,就把视角放广一点寻找新的思路

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

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

相关文章

单例模式 详解

单例模式 简介: 让类只初始化一次, 然后不同的地方都能获取到同一个实例 这是非常常用的一种模式, 系统稍微大一点基本上都会用到. 在系统中, 不同模块的总管理类都已单例模式居多 这里我们不仅使用c实现单例模式, 也会用python2实现一遍 python代码 想要看更详细的python单…

【Python机器学习】NLP——一个简陋的聊天机器人

目录 正则表达式 一个简答的聊天机器人 另一种方法 正则表达式就是一种FSM&#xff0c;同时它也给出了一种可能的NLP方法&#xff0c;即基于模式的方法。 正则表达式 现实生活中&#xff0c;密码锁其实就是一台简单的语言处理机。密码锁不能阅读和理解课本&#xff0c;但是…

高性能web服务器nginx

目录 nginx简介 服务端 I/O 流程 Nginx 进程结构 Nginx启动流程 nginx的源码编译下载 nginx命令常见参数 nginx的配置文件详解 全局配置优化 nginx的平滑升级和回滚 nginx目录匹配优先级测试&#xff08;因为只支持访问文件&#xff0c;所有不比对匹配目录优先级&…

STM32GPIO引脚八种工作模式

1. GPIO简述 GPIO&#xff08;General-purpose input/output&#xff09;&#xff0c;通用型输入输出。简单理解就是我们可以控制输入输出的STM32引脚&#xff0c;统称为GPIO。 GPIO存在的意义就是用程序控制或读取它们的输出或输入。 2. 功能描述 每个GPI/O端口有两个32位配…

代码随想录算法训练营day50:图论01:图论理论基础;深度优先搜索理论基础;98. 所有可达路径;广度优先搜索理论基础

图论理论基础 分类&#xff1a;有向图&#xff0c;无向图&#xff0c;有无权重 度&#xff1a;【无向图】&#xff1a;有几条边连接该节点&#xff0c;该节点就有几度。 【有向图】&#xff1a;每个节点有出度和入度。出度&#xff1a;从该节点出发的边的个数。入度&#xf…

.net maui安卓开发中适用明文传输(一)

背景:最近在做一个pad上的项目,目的是执行每日点检功能(就是检查设备的各项保养指标);前期用HBuilder做了一个,但是现场的触摸屏选用的是TouchPie 安卓版本是6.0版本,上次开发的软件可以在安卓7.0上完美兼容,但由于触摸屏安卓版本太低不能兼容;询问厂商才知道这款触摸…

前端性能优化的指标

性能优化指标的出现,谷歌在2020年提出的Core Web Vitals 和 Web Vitals 了解谷歌浏览器自带的性能调试工具DCL、L、FP、FCP、LCP,图层(有layout布局就是回流,painting绘制就是重绘) 回流和重绘的理解 页面第一次打开一定回流和重绘,回流一定重绘,回流出现一般是位置改变…

BEV世界:通过统一的BEV潜在空间实现自动驾驶的多模态世界模型

BEVWorld: A Multimodal World Model for Autonomous Driving via Unified BEV Latent Space BEV世界&#xff1a;通过统一的BEV潜在空间实现自动驾驶的多模态世界模型 Abstract World models are receiving increasing attention in autonomous driving for their ability t…

【数据结构】PTA 求链表的倒数第m个元素 C语言

请设计时间和空间上都尽可能高效的算法&#xff0c;在不改变链表的前提下&#xff0c;求链式存储的线性表的倒数第m&#xff08;>0&#xff09;个元素。 函数接口定义&#xff1a; ElementType Find( List L, int m ); 其中List结构定义如下&#xff1a; typedef struct…

什么是机器人快换盘?

机器人快换盘&#xff0c;行业内也称作工具快换盘、换枪盘、快换工具盘、快速更换器、快换器、 快换夹具、治具快换等。是末端执行器快速更换装置&#xff08;End-Of-Arm Tooling&#xff0c;简称EOAT&#xff09;&#xff0c;是工业自动化领域中用于机器人手臂上的一种重要设备…

短视频矩阵工具种类繁多,一招教你轻松做选择!

在当下竞争日益激烈的市场中&#xff0c;选择一个稳定且高效的矩阵营销系统对于企业和实体店来说至关重要&#xff0c;然而众多的工具往往让人难以抉择&#xff0c;今天笔者给大家四个关键筛选点&#xff0c;帮你快速筛选出最合适自己的矩阵营销工具&#xff1a; 1. 功能全面性…

探索AI工作流工具:提升编程效率的三大利器

问题&#xff1a;面对屎山代码&#xff0c;你是如何处理的&#xff1f; 今天我将为你推荐三个强大的AI工作流工具&#xff0c;它们将彻底改变你的编程体验&#xff0c;让你在工作中如鱼得水&#xff0c;事半功倍&#xff01; 1. 代码解释器&#xff1a;解读复杂代码的利器 初…

[CISCN 2023 华北]ez_date

[CISCN 2023 华北]ez_date 点开之后是一串php代码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__); class date{public $a;public $b;public $file;public function __wakeup(){if(is_array($this->a)||is_array($this->b)){die(no array);}if( (…

初级python代码编程学习----简单的图形化闹钟小程序

我们来创建一个简单的图形化闹钟程序通常需要使用图形用户界面&#xff08;GUI&#xff09;库。以下是使用Python的Tkinter库创建一个基本闹钟程序的步骤&#xff1a; 环境准备 确保已安装Python。安装Tkinter库&#xff08;Python 3.8及以上版本自带Tkinter&#xff0c;无需…

计算机毕业设计选题推荐-餐馆满意度分析-Python爬虫-K-means算法-nlp情感分析

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

亿玛科技:TiDB 6.1.5 升级到 7.5.1 经验分享

作者&#xff1a; foxchan 原文来源&#xff1a; https://tidb.net/blog/6e628afd 为什么要升级&#xff1f; 本次升级7.5的目的如下&#xff1a; 1、tidb有太多的分区表需要归档整理。7.5版本这个功能GA了。 2、之前集群tikv节点的region迁移过慢&#xff0c;影响tikv节…

http连接未释放导致生产故障

凌晨4点运维老大收到报警&#xff08;公司官网页面超时&#xff0c;上次故障因为运维修改nginx导致官网域名下某些接口不可用后&#xff0c;运维在2台nginx服务器上放了检测程序&#xff0c;检测官网页面&#xff09;&#xff0c;运维自己先看了看服务器相关配置&#xff0c;后…

linux 安装MAT(MemoryAnalyzerTool),并且分析java dump的方法

当我们的java进程出现异常的时候&#xff0c;我们第一件想做的事情是什么呢&#xff1f;应该就是要分析java的内存了。假如说&#xff0c;我们已经有了一个java内存的dump文件&#xff0c;有哪些的方法&#xff0c;可以对这个导出的dump文件进行分析呢&#xff1f; 比如&#…

Vue插值:双大括号标签、v-text、v-html、v-bind 指令

创建应用程序实例后&#xff0c;需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后&#xff0c;数据和视图会相互关联&#xff0c;当数据发生变化时&#xff0c;视图会自动进行更新。这样就无须手动获取 DOM 的值&#xff0c;使代码更加简洁&…

【Python_PyQtGraph 学习笔记(十一)】基于ImageExporter更改导出图片的大小

基于ImageExporter更改导出图片的大小 前言正文1、ImageExporter 类介绍1.1 ImageExporter 类特点1.2 ImageExporter 类用法2、示例代码3、遇到的问题前言 在 基于PyQtGraph设置槽函数,实现保存图片到本地的功能 一文中我们成功地将 PyQtGraph 绘制的图形以图片形式保存到本地…