STL <string>--------String的OJ题目

news2025/6/10 9:29:32

1.题目截图(把字符串转换成整数----atoi)

1.1题目解析(在代码里)

class Solution {
public:
    int myAtoi(string str) {
        // 100%  97.45%   
        int len = str.size();
        if(len == 0)
            return 0;
        int i = 0, flag = 1, isSignal = 0, res = 0;
        while(i < len && str[i] == ' ')  //跳过空格
            i++;
        if(i >= len)  //如果全是空格
            return 0;
        while(i < len && str[i] == '-' || str[i] == '+'){  //取符号
            if(str[i] == '-')
                flag = -1;
            i++;
            isSignal++;
            if(isSignal > 1)  //不能超过一个符号
                return 0;
        }
        while(isdigit(str[i])){  //只要前面的那些数字
            if(res > INT_MAX / 10 || (res == INT_MAX / 10 && str[i] > '7'))  //用int来控制不溢出
                return flag == 1? INT_MAX : INT_MIN;
            res = res * 10  - '0' + str[i];
            i++;
        } 
        return flag * res;
    }
};

2.Leetcode415--字符串相加

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;
    }
};

3.Leetcode----344.反转字符串

3.1用双指针解决问题

class Solution {
public:
    void reverseString(vector<char>& s)
     {
        int n = s.size();
        for(int left = 0,right = n - 1;left < right;left ++ , right--)
        {
            swap(s[left] , s[right]);
        }
    }
};

4.Leetcode387--- 字符串中的第一个唯一字符

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;
    }
};

5.Leetcode----125 验证回文串

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;
    }
};

6.Leetcode---43.字符串相乘

class Solution 

{

public:



  void MulItem(string &tmp, string &num1, char a)

  {

    int i = 0, sign=0;

    int mul = 0;

    while(i < num1.size())

    {

      mul = (num1[i]-'0') * (a-'0') + sign;

      if(mul >= 10)

      {

        sign = mul / 10;

        mul %= 10;

      }

      else

        sign = 0;

      tmp.push_back(mul+'0');

      i++;

    }    

    if(sign > 0)

      tmp.push_back(sign+'0'); 

  }   

  //对应为相加,sign进位采用引用传递

  int AddItem(int a, int b, int &sign)

  {

    int add = a+b+sign;

    if(add >= 10)

    {

      sign = 1;

      add -= 10;

    }

    else

      sign = 0;

    return add;

  }

  //错位相加

  void MoveAdd(string &result, string &tmp, int k)

  {

    int i, j;

    i = k;

    j = 0;

    int sign = 0;

    while(i<result.size() &&j<tmp.size())

    {

      result[i] = AddItem(result[i]-'0', tmp[j]-'0', sign) + '0';

      i++;

      j++;

    }

    while(i<result.size() && sign)

    {

      result[i] = AddItem(result[i]-'0', 0, sign)+'0';

      i++;

    }

    while(j < tmp.size())

    {

      int v = AddItem(0, tmp[j]-'0', sign);

      result.push_back(v+'0');

      j++;

    }

    if(sign)

      result.push_back(sign+'0');

  }



  string multiply(string num1, string num2) 

  {

  	 //先翻转数据,方便进位处理

     reverse(num1.begin(), num1.end());

     reverse(num2.begin(), num2.end());



     string tmp, result;

     for(int i=0; i<num2.size(); ++i)

     {

     	 //使用num2的每一个数据乘以num1

       MulItem(tmp, num1, num2[i]);

       //将乘得的结果进行错位相加

       MoveAdd(result, tmp, i);

       tmp.clear();

     }    



     while(result.size()!=1 && result.back()=='0')

      result.pop_back();



		 //翻转数据,恢复数据

     reverse(result.begin(), result.end());

     return result;

  }

};

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

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

相关文章

QJsonObject构建指定的JSON结构

如今我们生活处处用到AI,AI 带给了我们很多方便&#xff0c;但作为程序员我们&#xff0c;虽然不能开发什么 AI&#xff0c;但时不时需要调用国内四大平台的AI接口。很多平台接口都是用JSON作为数据载体传送。 如下接口数据 &#xff0c;有些人不知道怎么构建。 1&#xff0c;…

[C++核心编程-08]----C++类和对象之运算符重载

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

黑马guli商城项目初始化-SpringCloud微服务项目初始化使用SpringCloudAlibaba快速搭建分布式系统

视频教程&#xff1a;https://www.bilibili.com/video/BV1np4y1C7Yf?p4&spm_id_frompageDriver&vd_source0b3904471b2f8a3a133e05bd42f729a9 这里写目录标题 1.服务架构图2.初始化目录结构3.初始化数据库4.使用逆向工程项目生成数据库CRUD5.创建工具项目6.配置mybati…

CentOS7使用Docker安装Redis图文教程

1.拉取Redis镜像 这里制定了版本&#xff0c;不指定默认latest最新版 docker pull redis:6.0.8提示信息如下即为下载成功 2.上传配置文件 官方配置文件&#xff08;找自己对应的版本&#xff09;&#xff1a;reids.conf 或者将如下配置文件命名为redis.conf&#xff0c;上…

面试题草稿

目录 一&#xff0e;JAVA基础 1.八个基本数据类型&#xff0c;长&#xff0c;占几个字节&#xff0c;取值范围是多少。 基本类型&#xff1a; 2.面向对象的特征 1. 封装&#xff08;Encapsulation&#xff09; 3.实现多态的几种方式 4.什么叫装箱什么叫拆箱 5.装拆箱分别…

Nginx启动关闭重启用脚本实现

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nginx(“engine x”…

快手截流多功能协议引流多线程多账号使用

在市场上&#xff0c;类似的软件售价都在几千元&#xff0c;但我发现这款全新版本的软件已经更新&#xff0c;而且我只需要配合使用谷歌浏览器&#xff0c;稍微调慢一点延时&#xff0c;我就可以像专业人士一样流畅地进行操作。 评论对于我而言是一种艺术&#xff0c;而不仅仅是…

植物大战僵尸杂交版(含下载方式)

最近时间&#xff0c;一款很火的植物大战僵尸杂交版火爆出圈&#xff0c;在玩家之间疯狂扩散。各种奇特的杂交组合让游戏变得更加有趣。 游戏介绍 植物大战僵尸杂交版是一款将《植物大战僵尸》和植物杂交概念结合在一起的独特塔防策略游戏。它将《植物大战僵尸》中的植物与进行…

【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置

本节博客主要是通过“在排序数组中查找元素的第一个和最后一个位置”总结关于二分算法的左右界代码模板&#xff0c;有需要借鉴即可。 目录 1.题目2.二分边界算法2.1查找区间左端点2.1.1循环条件2.1.2求中点的操作2.1.3总结 2.2查找区间右端点2.1.1循环条件2.1.2求中点的操作2.…

FebHost:为什么企业需要注册保加利亚.BG域名?

在当今全球化的商业环境中&#xff0c;对于与保加利亚市场息息相关的企业而言&#xff0c;选择合适的域名至关重要。.BG域名作为企业在线身份的重要组成部分&#xff0c;提供了多重利好&#xff0c;成为业内不容忽视的战略资源。 首先&#xff0c;地域标识性强是.BG域名的一大…

ArrayList和LinkedList的使用

ArrayList List<> list new ArrayList<>(); LinkedList

深入理解 House of Cat

Index 序言利用 FSOP 调用 House of Cat利用条件伪造IO流条件完整调用链分析 模板System (one_gadget) 模板ORW模板 Demo & Exp利用 __malloc_assert 调用 House of Cat例题&#xff1a;题目思路Exp 序言 原文章&#xff1a;深入理解 House of Cat 随着 GNU 持续不断的更…

【Linux-IMX6ULL-DDR3简介测试-RGBLCD控制原理】

目录 1. DDR3 简介1.1 前要基本概念RAM & ROM 2. DDR3测试及初始化3. RGBLCD简介及控制原理3.1 RGBLCD简介3.2 RGBLCD-时序-像素时钟-显存3.2.1 RGB LCD时序3.2.2 像素时钟&#xff08;800*400分辨率&#xff09;3.2.2 显存&#xff08;800*400分辨率&#xff09; 3.3 RGBL…

Spring注解解析:条件注解@Condition注解和@ConditonOnXXX注解

文章目录 一、条件注解二、Conditional1、使用方法2、示例 一、条件注解 条件注解的作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的&#xff0c;可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所…

.NET 分享一款Web打包和解压缩工具

01本文概要 在.NET部署环境中&#xff0c;利用IIS中间件开启对ASP的支持&#xff0c;可以实现许多强大的文件操作功能。特别是在一些需要进行预编译的情况下&#xff0c;通过上传ASP脚本&#xff0c;可以获得WebShell&#xff0c;从而方便地进行各种操作。本文将介绍一个名为S…

运动耳机怎么选?五款新手必买的运动耳机盘点

运动耳机是专为运动爱好者设计的耳机&#xff0c;轻巧便携&#xff0c;佩戴稳固。无论你在跑步、健身还是骑行&#xff0c;它都能为你带来优质的音乐体验。那如何选择一款合适的运动耳机呢&#xff1f;这里&#xff0c;我结合自己和身边朋友平时选购经验&#xff0c;整理了一些…

sklearn机器学习编程练习大全(二)

sklearn机器学习编程练习大全&#xff08;二&#xff09; 第11题 从字符串提取标签第12题 IRIS数据集探索第13题 构建模型&#xff0c;计算准确率第14题 预估目标列编码第15题 one-hot编码 第11题 从字符串提取标签 DataFrame如下&#xff1a; 如何将以上的DataFrame变成如下的…

python批量生成25位数字字母混合序列号(SN码)

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 SN码,即Serial Number的缩写,有时也被称为Serial No,是产品序列号的意思。它是一个独特的标识符,用于区分同一种类

第二证券资讯|昨夜,黄金大涨、美股创新高!人民币狂拉

受降息预期影响&#xff0c;美股三大指数团体创新高&#xff0c;黄金期现价格亦大幅走高。 当地时间5月15日星期三&#xff0c;美股三大股指全线收涨。道指涨0.88%&#xff0c;纳指涨1.40%&#xff0c;标普500指数涨1.17%。 经济数据方面。美国4月CPI同比上涨3.4%&#xff0c…

每日一练 2025.5.16

题目&#xff1b; 给定一个非负整数&#xff0c;你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。注意: 给定数字的范围是 [0, 108] 解题&#…