当前位置: 首页 > article >正文

C++第一次练习

题目1

class Solution {
public:
    bool isletter(char s)
    {
        if(s<='z'&&s>='a')
            return true;
        if(s>='A'&&s<='Z')
            return true;
        return false;
    }
    string reverseOnlyLetters(string s) {
        if(s.empty())
        {
            return s;
        }
        int left,right;
        left=0;
        right=s.size()-1;
        while(left<right)
        {
            while(left<right&&!isletter(s[left]))
            {
                left++;
            }
            while(left<right&&!isletter(s[right]))
            {
                right--;
            }
            swap(s[left++],s[right--]);
        }
        return s;
    }
   
};

首先要判断是不是字母,因为题目说的是只动字母,然后还要判断s是不是空的,因为空的就不需要操作了,接着是要left和right去得到俩头的字符,这里循环里面也有left<right是因为如果没有一个字母[left]就越界了,如果不是字母就走一位,直到left和right都遇到了字母,就执行swap交换俩个字母,换完位置后还要改变left和right,不然就死循环了,一直交换这俩个字母。

题目2 

class Solution {
public:
    int firstUniqChar(string s) {
        int count[26]={0};
        for(auto ch:s)
        {
            count[ch-'a']++;
        }

        for(int i=0;i<s.size();i++)
        {
            if(count[s[i]-'a']==1)
                return i;
            
        }
        return -1;
    }
};

先创建一个数组然后通过ch-‘a’可以得到相对位置,出现一次相对位置就会加1,s[i]-'a'可以获取对应位置的索引,判断这个字符串在count对应位置出现的次数是否为1,就可以找到第一个出现的字符

题目3 

class Solution {
public:
    string addStrings(string num1, string num2) {
        string str;
        int end1=num1.size()-1;
        int end2=num2.size()-1;
        int next=0;
        while(end1>=0||end2>=0)
        {
            int val1=end1>=0?num1[end1--]-'0':0;
            int val2=end2>=0?num2[end2--]-'0':0;
            int ret=val1+val2+next;
            next=ret/10;
            ret=ret%10;
            str.insert(str.begin(),'0'+ret);


        }
        if(next==1)
        {
            str.insert(str.begin(),'1');
        }
        return str;


    }
};

要字符串相加可以先把字符变成数字 ,end1和end2表示字符长度,while循环的条件是俩个字符都遍历完,val1是对应的索引值,如果end1是>=0的情况下,字符遍历完就一直为0,next是俩个数字相加可能会进位,所以和数除十可以得到十位数字,ret%10是为了得到个位的数字,str.insert()是头插函数,第一个参数是从那里开始插入,第二个参数是插入什么进去,最后判断next是否为1是可能最前面的俩个相加大于10,当end1和end2都不满足循环条件了,当next的1是要放在最前面的,


http://www.kler.cn/a/313430.html

相关文章:

  • JVM详解:JVM的系统架构
  • Vue 3 介绍及应用
  • 文献解读-DNAscope: High accuracy small variant calling using machine learning
  • 在Flutter中,禁止侧滑的方法
  • 以往运维岗本人面试真题分享
  • LeetCode【0014】最长公共前缀
  • WPF 依赖属性改变触发响应事件
  • 反转字符串中的单词--力扣151
  • 影刀RPA实战:网页爬虫之苦瓜书籍数据
  • 前后端分离项目--下载功能
  • 移植Linux:如何制作rootfs?
  • 相机畸变系数$b_1,b_2$与畸变系数aspect ratio和skew的互转
  • css scrollbar-width: none 隐藏默认滚动条
  • WPF DataGrid 列表中,DataGrid.Columns 列根据不同的值显示不同内容
  • MyBatis 源码解析:TypeHandler 设计与自定义实现
  • ★pwn 更改pwn题libc保姆级教程★
  • SpringBoot+Thymeleaf图书管理系统
  • Go语言并发模式详解:深入理解管道与上下文的高级用法
  • 集群聊天服务器项目【C++】项目介绍和环境搭建
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77
  • 缓存预热方案详解
  • 论文笔记:交替单模态适应的多模态表征学习
  • WebLogic 后台弱⼝令GetShell
  • WPF入门教学四 WPF控件概述
  • opencv中读取图片、视频以及对其基本操作
  • 关系型数据库,NoSQL和内存数据库三种数据库的比较