string OJ题

下面分享一下string做题心得

        1. 明白字符串中存储的数字为'0' '8'  '9'与0 8 9 完全不同,字符'0'其实在串中存储的是48,要有意识的转化。字符串中如果存数字8,意味着存了BS(退格)

        例如1: 算出结果为5,存入使用s+=(5+'0')

        例如2:读取数据 int num1 = s[i]-'0'

        2. 要熟练运用 s+=  或者 reserve(s1.begin() ,s1.end())或者是s1 = s2与s1.assign(s2)作用相同。

        3. 遇到不熟悉的接口一定要去查一查。

        下面为ascii表

        后面分享了3道oj题

43. 字符串相乘

检验是否是回文串

字符串转整形字符

检验是否是回文串第一题答案

class Solution {
public:
    string addStrings(string num1, string num2) 
    {
        int carry=0;
        string s3;
        int end1=num1.size()-1;
        int end2=num2.size()-1;

        while(end1>=0 ||end2>=0)
        {
            int x1 = end1 >= 0 ? num1[end1--]-'0' : 0;
            int x2 = end2 >= 0 ? num2[end2--]-'0' : 0;

            int end=x1+x2+carry;
            carry=end/10;
            end=end%10;

            s3+=(end+'0');
        }
        if(carry==1)
        {
            s3+='1';
        }
        reverse(s3.begin(),s3.end());
        return s3;
    }

	string multiply(string num1, string num2)
	{
        string return_string("0");
        if(num1.size()==1&&num1[0]=='0'
        ||num2.size()==1&&num2[0]=='0')
        return return_string;

		int end1 = num1.size() - 1;
		int end2 = num2.size() - 1;
		int carry = 0;
		int count[num2.size()+2];
		int num = 0;

		for (int i = 1; i <= num2.size(); ++i)
		{
			string s;
            int t=i;
            while(t>1)
            {
                s+='0';
                --t;
            }
			int numend1 = end1;
			while (numend1 >= 0)
			{
				int x1 = num1[numend1--] - '0';
				int x2 = num2[end2] - '0';
				int end = x1 * x2 + carry;
				carry = end / 10;
				end = end % 10;
				s += (end+'0');
			}
			if (carry > 0)
			{
				s += (carry+'0');
                carry=0;
			}
            end2--;
			reverse(s.begin(), s.end());
            string s3= addStrings(s,return_string);
            return_string.assign(s3);
		}
		return  return_string;

	}
};

第二题答案

class Solution {
public:
    bool ischar(char x)
    {
        if(x>='0'&&x<='9'
        ||x>='A'&&x<='Z'
        ||x>='a'&&x<='z')
        {
            return true;
        }
        return false;
    }
    bool isPalindrome(string s) 
    {
        for(auto& e:s)
        {
            if(e>='A'&&e<='Z')
            {
                e+=32;
            }
        }
        int begin=0;
        int end=s.size()-1;
        while(begin<end)
        {
            while(begin<end && !ischar(s[begin]))
            {++begin;}


            while(begin<end && !ischar(s[end]))
            {--end;}

            if(s[begin]!= s[end])
            {
                return false;
            }
            else
            {
                ++begin;
                --end;
            }
        }

        return true;
    }
};

第三题答案

class Solution {
public:
    int myAtoi(string str) 
     {
        bool sign = true;   //默认为正数

      // 跳过开头可能存在的空格
      int i = 0;
      while(i < str.size() && str[i] == ' ') 
      {
          i++;
      }

      //接着判断首个字符是否为正负号
      if(str[i] == '-') 
      {
          sign = false;  // 该字符串为负数,移至下一个字符接着判断
          i++;          
      }
      else if(str[i] == '+')  // 字符串为正数,sign已经默认为true,直接移动到下一位即可
          i++;   

      //下面开始对非正负符号位进行判断
      if(str[i] < '0' || str[i] > '9') // 正常数字第一位不能是0,必须为1~9之间的数字,否则就是非法数字
          return 0;  

      int res = 0;   //这里res用的int型,需要更加仔细考虑边界情况,但如果用long的话可以省去一些麻烦
      int num = 0; 
      int border = INT_MAX / 10;  // 用来验证计算结果是否溢出int范围的数据
      while(i < str.size())
      {
          // 遇到非数字字符,则返回已经计算的res结果
          if(str[i] < '0' || str[i] > '9') 
              break;

          // 注意这句话要放在字符转换前,因为需要验证的位数比实际值的位数要少一位, 这里比较巧妙的地方在于
          // 1. 用低于int型数据长度一位的数据border判断了超过int型数据长度的值 
          // 2. 将超过最大值和低于最小值的情况都包括了
          if(res > border || res == border && str[i] > '7')  
              return sign == true ? INT_MAX : INT_MIN;

          //开始对数字字符进行转换
          num = str[i] - '0';
          res = res * 10 + num;
          i++;
      }
        
      //最后结果根据符号添加正负号
      return sign == true ? res : -res;
  }
};

看到这里啦,你应该已经有了不少收获了

这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

欢迎各位点赞,收藏和关注哦

如果有疑问或有不同见解,欢迎在评论区留言哦

后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

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

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

相关文章

网上打印试卷的步骤是什么

对于学生和家长来说&#xff0c;打印试卷是日常学习中的一项重要需求。那么&#xff0c;如何在网上方便地打印试卷呢&#xff1f;下面&#xff0c;就让我来为您介绍琢贝云打印的试卷打印步骤。 一、选择琢贝云打印的原因 支持多种文件格式打印&#xff0c;包括图片、PPT、PDF、…

20.SkyWalking

一.简介 SkyWalking用于应用性能监控、分布式链路跟踪、诊断&#xff1a; 参考连接如下&#xff1a; https://github.com/apache/skywalking https://skywalking.apache.org/docs/ 二.示例 通过官网连接进入下载页面&#xff1a;https://archive.apache.org/dist/skywalkin…

2024年【T电梯修理】考试内容及T电梯修理新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【T电梯修理】考试内容及T电梯修理新版试题&#xff0c;包含T电梯修理考试内容答案和解析及T电梯修理新版试题练习。安全生产模拟考试一点通结合国家T电梯修理考试最新大纲及T电梯修理考试真题汇总&#xff0c;…

k8s中yaml文件配置指定私有镜像仓库

1. yaml文件介绍 2. 如何快速编写yaml文件 1&#xff09;如果有已存在的pod时可以 kubectl get pod xxxxxx -oyaml 2&#xff09;直接假跑一次并查看 kubectl run xxxxxx --image镜像名 --dry-run -oyaml 3&#xff09;查看pod相关描述信息 kubectl explain pod 3. 编写…

linux 安装redis 并设置开机启动

个人实测 流程 1、第一步 先下载redis ** redis地址 https://download.redis.io/releases/选择你想要的版本 我下载的是 如下图 2、第二步:把下载的包放到linux里面 我用的是 XSHELL 和XFTP 放到/usr/local/java路径下 你可以随便放 3、第三步: ** 执行 以下命令 进行解压 t…

js之图表使用

今天为了给大家演示图表的使用,今天展示下切换图形的修改属性快速修改 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"./js/jquery-3.7.1.js"></script><script src…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

flash-linear-attention中的Chunkwise并行算法的理解

这里提一下&#xff0c;我维护的几三个记录个人学习笔记以及社区中其它大佬们的优秀博客链接的仓库都获得了不少star&#xff0c;感谢读者们的认可&#xff0c;我也会继续在开源社区多做贡献。github主页&#xff1a;https://github.com/BBuf &#xff0c;欢迎来踩 0x0. 前言 …

老外卖27刀每月的教程已经更新

用了两天半的时间&#xff0c;边学习&#xff0c;边整理了一份老外的视频教程&#xff0c;涉及Facebook&#xff0c;YouTube&#xff0c;tiktok等大的流量平台&#xff0c;有案例&#xff0c;有分析&#xff0c;有如何做。 这个教程是老外讲的&#xff0c;没有什么玄乎的塑造价…

mysql 函数 GROUP_CONCAT 踩坑记录,日志:Row 244 was cut by GROUP_CONCAT()

mysql 函数 GROUP_CONCAT 踩坑记录&#xff0c;报错&#xff1a;Row 244 was cut by GROUP_CONCAT 结论&#xff1a;个人建议还是放在内存中拼接吧~db日志信息&#xff1a;Row 244 was cut by GROUP_CONCAT())根本原因&#xff1a;拼接的字符串长度超过 group_concat_max_len […

【LLM多模态】多模态LLM在图表处理的应用

note 在真实场景下&#xff0c;我们进行测试&#xff0c;多模态大模型在处理显著文本时表现尚可&#xff0c;但在处理细粒度文本时往往效果并不太好&#xff0c;why? ​具体原因如下&#xff1a; 首先&#xff0c;视觉编码器的分辨率对于多模态大模型的性能影响较大&#x…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知&#xff0c;其主要通过 Ding…

IIC通信(STM32)

一、IIC概念 &#xff11;、两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09; 同步&#xff0c;半双工 2、带数据应答 3、支持总线挂载多设备&#xff08;一主多从、多主多从&#xff09;一般使用一主多从。一主多从的…

clone方法总结Java

Java中Object类当中有许多方法&#xff0c;如图所示&#xff1a; clone方法就是其中一种&#xff0c;分为浅拷贝&#xff0c;深拷贝举一个例子&#xff1a; 浅拷贝&#xff1a; 在Person类当中右键鼠标然后&#xff0c;选中Generate&#xff1a; 然后重写clone方法 protecte…

Linux-应用编程学习笔记(三、文件属性和目录)

一、文件类型 1、普通文件&#xff08;ls -l 文件&#xff0c;权限前边第一个"-"代表普通文件&#xff1b;stat 文件&#xff09; 文本文件&#xff1a;ASCII字符 二进制文件&#xff1a;数字0/1 2、目录文件&#xff08;‘’d&#xff09;&#xff1a;文件夹 3…

每日两题 / 79. 单词搜索 39. 组合总和(LeetCode热题100)

79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; 遍历board&#xff0c;遇到字符等于word的第一个字符时&#xff0c;进行dfs回溯 设置访问数组&#xff0c;标记已经走过的坐标 每次dfs时&#xff0c;往四个方向走&#xff0c;若当前字符不匹配则回溯&#xff0c;记得消…

【深度学习】paddlets,时序数据预测

文章目录 一、环境二、题目1三、题目2四、题目3五、函数参数 资料&#xff1a; https://paddlets.readthedocs.io/zh-cn/latest/source/api/paddlets.models.base.html#paddlets.models.base.BaseModel.recursive_predict https://aistudio.baidu.com/projectdetail/5866171?…

记一次MySQL执行修改语句超时问题

异常问题 原因分析 这个问题发生在开发环境&#xff0c;怀疑是提交事务时终止项目运行&#xff0c;没有提交该事务&#xff0c;造成死锁 调试该事务时时间太长&#xff0c;为什么说有这个原因呢&#xff0c;因为通过查找日志显示 The client was disconnected by the server …

$subcribe的使用

$subcribe的使用 只要是store都有$subscribe函数&#xff0c;是订阅的意思&#xff0c;可以监测到store中数据的变化 使用$subscribe函数可以实现刷新不丢失&#xff0c;将数据保存到浏览器的本地存储中&#xff0c;每次进入页面都使用localStorage的数据填充页面

【credit_based流控机制】

credit_based流控机制 1 credit_based way1.1 Principle1.3 DFD1.4 Module1.4.1 Interface1.4.2 Code Block 在网络芯片处理大流量报文中&#xff0c;一般主要是两种机制&#xff1a;1.valid–ready反压(backpressure)机制&#xff1b;2.credit信用机制&#xff1b; credit机制…