C++ 习题精选(2)

目录

  • 1. 验证回文串
  • 2. 字符串相乘

1. 验证回文串

题目描述:如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 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 字符组成

题目链接:https://leetcode.cn/problems/valid-palindrome/?clienttype=8&version=7.40.0.113&from=win32_yunguanjia&channel=00000000000000000000000040000001&privilege=&pri_extra=

答:解题思路:由于判断回文时不区分字母大小写且忽略数字和字母字符以外的字符,所以需要先把字符串中的字符统一转成大写或小写。首先创建一个string类的tmp对象,遍历一遍字符串把数字和字母字符存储到tmp中,同时统一转换大小写,然后对tmp对象判断是否回文。

代码如下:

class Solution {
public:
    bool isPalindrome(string s) {

        // 所需变量
        string tmp;  // 存储原顺序的数字和字母字符
        // 遍历字符串,存储数字和字母字符,同时把字母字符转换为小写
        int len = s.size();
        for (int i = 0; i < len; ++i)
        {
            if (isalnum(s[i]))  // 头文件cctype中的函数,判断是否为数字和字母字符
            {
                // 如果是字母字符则转换为小写
                if (isalpha(s[i]))
                    s[i] = tolower(s[i]);
                // 存储
                tmp += s[i];
            }    
        }
        // 遍历tmp字符串,判断是否回文
        int begin = 0;
        int end = tmp.size() - 1;
        while (begin < end)
        {
            // 本组字符判断
            if (tmp[begin] != tmp[end])
                return false;
            // 下一组
            ++begin;
            --end;
        }
        return true;
    }
};

2. 字符串相乘

题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”

示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”

提示:
1 <= num1.length, num2.length <= 200
num1 和 num2 只能由数字组成。
num1 和 num2 都不包含任何前导零,除了数字0本身。

题目链接:https://leetcode.cn/problems/multiply-strings/description/?clienttype=8&version=7.40.0.113&from=win32_yunguanjia&channel=00000000000000000000000040000001&privilege=&pri_extra=

答:解题思路:这道题也算C++ 习题精选(1)中字符串相加的进阶题了。字符串相加我们想到了数值相加,那么字符串相乘我们也可以想到数值相乘。首先,判断乘数是否为0,即判断两个字符串中是否有一个为0。然后用第二个字符串中的每一位去乘以第一个字符串,对每次相乘的结果补0,个位不补,十位补一个0。然后把这些相乘的结果加起来。
在这里插入图片描述
代码如下:

// 一次相乘的函数
static void once(const string& s, string& tmp, char c, int z)
{
    // 如果乘数位0,直接返回
    if (c == '0')
        return;

    int add = 0;  // 进位值
    int i = s.size() - 1;
    int n;
    int x = c - '0';
    while (i >= 0 || add > 0)
    {
        // 每位的数字
        n = i >= 0 ? s[i] - '0' : 0;
        // 相乘
        int reslut = n * x + add;
        // 存储
        add = (reslut / 10);
        tmp += (reslut % 10 + '0');
        // 下一位数字
        --i;
    }
    // 反转字符串
    reverse(tmp.begin(), tmp.end());
    // 补0
    while (z--)
        tmp += '0';
}

// 两个字符串相加
static string add(const string& s1, const string& s2)
{
    int i = s1.size() - 1, j = s2.size() - 1;  // 每位的下标
    int n1, n2;  // 每位数
    int add = 0;  // 进位值
    string tmp;  // 存储相加结果
    while (i >= 0 || j >= 0 || add > 0)
    {
        // 每位数的值
        n1 = i >= 0 ? s1[i] - '0' : 0;
        n2 = j >= 0 ? s2[j] - '0' : 0;
        // 相加
        int result = n1 + n2 + add;
        // 存储
        add = result / 10;
        tmp += (result % 10 + '0');
        // 下一组
        --i;
        --j;
    }
    // 反转字符串
    reverse(tmp.begin(), tmp.end());
    // 返回结果
    return tmp;
}

class Solution {
public:
    string multiply(string num1, string num2) {
        // 如果有一个乘数为0,则返回0
        if (num1 == "0" || num2 == "0")
            return "0";
        // 所需变量
        string result;  // 存储结果
        // 用num2的每一位乘以num1,然后相加
        int j = 0;  // 补0的个数
        for (int i = num2.size() - 1; i >= 0; --i, ++j)
        {
            // 存储每次相乘的结果
            string tmp;
            // 相乘
            once(num1, tmp, num2[i], j);
            // 相加每次结果并存储
            result = add(result, tmp);
        }
        // 返回结果
        return result;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试基础09:缺陷(bug)生命周期、定位方式和管理规范

课程大纲 1、缺陷&#xff08;bug&#xff09;生命周期 2、缺陷&#xff08;bug&#xff09;提交规范 2.1 宗旨 简洁、清晰、可视化&#xff0c;减少沟通成本。 2.2 bug格式和内容 ① 标题&#xff1a;一级功能-二级功能-三级功能_&#xff08;一句话描述bug&#xff1a;&…

linux命令:调试必备工具dmesg

在服务器上进行芯片调试时&#xff0c;我们会遇到各种各样的问题&#xff0c;很多问题与操作系统相关。此时就需要了解操作系统发生了哪些事件。 dmesg 是linux系统中用来打印或控制内核缓冲区内容的命令。这个环形缓冲区记录了系统启动以来发生的各种事件消息&#xff0c;包括…

远程自动锁定平面

目录 Ubuntu 系统上 方法一&#xff1a;使用 SSH 重新连接 方法二&#xff1a;解锁当前会话 方法三&#xff1a;通过 SSH 解锁会话 方法四&#xff1a;禁用自动锁屏&#xff08;如果合适&#xff09; windows系统 方法三&#xff1a;修改组策略设置 Ubuntu 系统上 远程…

派生类中调用基类的__init__()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在派生类中定义__init__()方法时&#xff0c;不会自动调用基类的__init__()方法。例如&#xff0c;定义一个Fruit类&#xff0c;在__init__()方法中创…

java并发常见问题

1.死锁&#xff1a;当两个或多个线程无限期地等待对方释放锁时发生死锁。为了避免这种情况&#xff0c;你应该尽量减少锁定资源的时间&#xff0c;按顺序获取锁&#xff0c;并使用定时锁尝试。 2.竞态条件&#xff1a;当程序的行为依赖于线程的执行顺序或输入数据到达的顺序时…

OpenEuler22.03 LTS自动安装单机版OpenGauss 5.0.2脚本

1,将脚本和opengauss软件包放到同一个目录下(不要放到/root下面,建议放到/opt/soft下面目录权限要有755),不需要进行解压缩,安装包下载地址如下: 软件包 | openGauss 2.规划好gs的数据目录,提前创建好目录,例如放到/data/guassdb/data下面,你只需要提前创建好/data就行了 3.…

Windows10系统中安装与配置PyTorch(无GPU版本)

文章目录 1. 什么是PyTorch2. PyTorch的安装与配置&#xff08;无GPU&#xff09;2.1 创建环境2.2 安装pytorch库&#xff08;无GPU&#xff09;2.3 验证安装结果 1. 什么是PyTorch PyTorch 是一种用于构建深度学习模型且功能完备的开源框架&#xff0c;通常用于处理图像识别和…

力扣83. 删除排序链表中的重复元素

Problem: 83. 删除排序链表中的重复元素 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义快慢指针fast、slow均指向head&#xff1b; 2.每次fast后移一位&#xff0c;当fast和slow指向的节点值不一样时&#xff0c;将slow.next指向fast同时使slow指向fast&#xff1b; 3…

FPGA代码移植案例分析:Tcl Scripts后提示找不到 vo 文件,Supra软件报错

FPGA代码移植案例分析&#xff1a;Tcl Scripts后提示找不到 vo 文件&#xff0c;Supra软件报错 客户工程师已经运行Tcl Scripts&#xff0c;正常没出错就会产生这个vo文件。工程师试了两次 运行之后点的next的&#xff0c;还是出现同样的错误。 建议客户在原quartus工程里重新…

【C#】自定义List排序规则的两种方式

目录 1.系统排序原理 2.方式一&#xff1a;调用接口并重写 3.方式二&#xff1a;传排序规则函数做参数 1.系统排序原理 当我们对一个List<int>类型的数组如list1排序时&#xff0c;一个轻松的list1.sort();帮我们解决了问题 但是在实际应用过程中&#xff0c;往往我们…

(五十)第 7 章 图(有向图的十字链表存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

hexo init命令报错:Error: EPERM: operation not permitted, mkdir ‘D:\‘

我用的是git bash通过hexo init安装hexo的&#xff0c;但是报错如下&#xff1a; $ hexo init INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: HTTP/2 stream 1 was not clos…

C++ B (1124) : 斐波那契数列第n项Plus

文章目录 一、题目描述二、参考代码 一、题目描述 二、参考代码 #include <iostream> #include <vector>using namespace std;const long long MOD 1e9 7; // 取模的值// 定义矩阵类 class Matrix { public:vector<vector<long long>> data;// 构造…

Java Agent利器

一、JavaAgent技术 1.1 什么是JavaAgent JavaAgent是一种特殊的Java程序&#xff0c;是Instrumentation的客户端。它与普通Java程序通过main方法启动不同&#xff0c;JavaAgent并不是一个可以单独启动的程序&#xff0c;它必须依附在一个Java应用程序&#xff08;JVM&#xf…

LLM背后的基础模型2:Transformer的组成模块

Transformer是一种先进的语言模型&#xff0c;它在预测下一个单词或标记方面与传统的语言模型有所不同&#xff0c;但仍然遵循相同的基本原理。Transformer通过一系列复杂的步骤&#xff0c;将输入的标记序列转换为能够进行预测的丰富向量序列。 在Transformer中&#xff0c;输…

A review of multi-class change detection for satellite remote sensing imagery

多类别变化检测综述 文章目录 多类别变化检测综述挑战数据集研究方法&#xff1a;后分类变化检测&#xff08;Post-Classification Change, PCC&#xff09;:直接分类&#xff08;Direct Classification, DC&#xff09;:基于深度学习的变化检测:三元变化检测&#xff08;Terna…

AtCoder Regular Contest 179 (ABC题)视频讲解

A - Partition Problem Statement You are given integers N N N and K K K. The cumulative sums of an integer sequence X ( X 1 , X 2 , … , X N ) X(X_1,X_2,\dots ,X_N) X(X1​,X2​,…,XN​) of length N N N is defined as a sequence Y ( Y 0 , Y 1 , … , …

java收徒、java面试辅导、java辅导、java就业辅导

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

本机安装深度学习库cuda11.8,cudnn8.6和tensorRT8.5

https://blog.csdn.net/qq_46107892/article/details/131453019 首先是安装cuda11.8 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pinsudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600wg…

Go 1.23新特性前瞻

2024年5月22日&#xff0c;Go 1.23版本[1]功能特性正式冻结&#xff0c;后续将只改bug&#xff0c;不增加新feature。 对Go团队来说&#xff0c;这意味着开始了Go 1.23rc1的冲刺&#xff0c;对我们普通Gopher而言&#xff0c;这意味着是时候对Go 1.23新增的功能做一些前瞻了&am…