C++:OJ练习(每日练习系列)

这篇具有很好参考价值的文章主要介绍了C++:OJ练习(每日练习系列)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++:OJ练习(每日练习系列),C++练习,算法,leetcode,c++,c语言

编程题:

题一:把字符串转换成整数

把字符串转换成整数_牛客题霸_牛客网

C++:OJ练习(每日练习系列),C++练习,算法,leetcode,c++,c语言

示例1

输入:

"+2147483647"

返回值:

2147483647

思路一:

第一步:it从str的第一个字符开始遍历,定义一个最后输出的值你,以及判断结果正负的flag;

第二步:第一个为正则忽略,为负将flag改为负值;

第三步:遍历字符串,遇到非字母直接退出,否则记录下来;

第四步:最后得到的值n乘以判断正负的flag就是结果。

class Solution {
public:
    int StrToInt(string str) 
    {
        //it从str的第一个字符开始遍历
        string::iterator it = str.begin();
        int n = 0;
        //由flag来决定结果的正负
        int flag = 1;
        //第一个为正则忽略,为负将flag改为负值
        if(*it == '+' )
        {
            it += 1;
        }
        if(*it == '-')
        {
            flag = -1;
            it += 1;
        }
        //遍历字符串,遇到非字母直接退出,否则记录下来
        while(it != str.end())
        {
            if(*it < 48 || *it > 57)
            {
                return 0;
            }
            else
            {
                n *= 10;
                n += *it - 48;
            }
            ++it;
        }
        return n * flag;
    }
};

题二:反转字符串

344. 反转字符串 - 力扣(LeetCode)

C++:OJ练习(每日练习系列),C++练习,算法,leetcode,c++,c语言

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

思路一:

        没有啥好说的直接从第一个字符开始与最后一个字符一起替换!!!

class Solution {
public:
    void reverseString(vector<char>& s) 
    {
        int left = 0;
        int right = s.size() - 1;
        //从第一个字符开始位置替换
        while(left < right)
        {
            swap(s[left],s[right]);
            ++left;
            --right;
        }
    }
};

思路二:

        直接用string类里的逆置接口reverse也可以直接完成反转!!!

class Solution {
public:
    void reverseString(vector<char>& s) 
    {
        reverse(s.begin(),s.end());
    }
};

题三:字符串中的第一个唯一字符

387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

C++:OJ练习(每日练习系列),C++练习,算法,leetcode,c++,c语言

思路一:

第一步:定义一个记录字母的数组

第二步:从下标为0开始遍历,记录字母对应数组下标的个数

第三步:再次遍历字符串,将在数组中只出现一次的的字母对应字符串的下标返回;

第四步:如果第三步中遍历完以后没有找到只出现一次的字母,返回-1.

class Solution {
public:
    int firstUniqChar(string s) 
    {
        //定义一个记录字母的数组
        int arr[26] = {0};
        int it1 = 0;
        //从下标为0开始遍历,记录字母对应数组下标的个数
        while(it1 < s.size())
        {
            arr[s[it1] - 'a'] += 1;
            ++it1;
        }
        int it2 = 0;
        //再次遍历字符串,将在数组中只出现一次的的字母对应字符串的下标返回
        while(it2 < s.size())
        {
            if(arr[s[it2] - 'a'] == 1)
            {
                return it2;
            }
            ++it2;
        }
        return -1;
    }
};

思路二:

第一步: 分别对字符串进行正序查询和反序查询

第二步: 如果所查询的字符下标相等,说明此字符只出现了一次。

class Solution {

public:
  int firstUniqChar(string s) 
  {
    for(int i=0; i<s.size(); ++i)
    {
      int index = s.find(s[i]);
      int reverse_index = s.rfind(s[i]);  
      if(index == reverse_index)
        return i;
    }
    return -1;
  }
};

 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!欢迎各位大佬在评论区探讨,交流!

如果本篇对你有帮助的话,三连支持一下吧。

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

                                              C++:OJ练习(每日练习系列),C++练习,算法,leetcode,c++,c语言文章来源地址https://www.toymoban.com/news/detail-754954.html

到了这里,关于C++:OJ练习(每日练习系列)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库LeetCode每日练习(三)

    目录 前言 题目1:游戏玩法分析 题目2:订单最多的客户 题目3: 大的国家 题目4:连续出现的数字 题目小结 回顾前文精彩片段 数据库LeetCode每日练习(一)_小杰312的博客-CSDN博客 sql操作LeetCode每日练习 https://blog.csdn.net/weixin_53695360/article/details/123985354?spm=1001.2014.3001.5501 数据库

    2024年02月11日
    浏览(22)
  • 数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

    目录 一.前言  二.leetcode160. 相交链表  1.问题描述 2.问题分析与求解 三.leetcode141. 环形链表 1.问题描述 2.代码思路  3.证明分析  下一题会用到的重要小结论: 四.leetcode142. 环形链表 II 1.问题描述 2.问题分析与求解 Judgecycle接口: 方法一: 方法二:  单链表和带环单链表

    2023年04月08日
    浏览(30)
  • 二叉树OJ练习题(C语言版)

    目录  一、相同的树  二、单值二叉树  三、对称二叉树  四、树的遍历 前序遍历 中序遍历 后序遍历  五、另一颗树的子树  六、二叉树的遍历  七、翻转二叉树  八、平衡二叉树 链接:100. 相同的树 - 力扣(LeetCode) 首先考虑比较时节点为空的情况,当比较到二者节点都

    2024年02月19日
    浏览(26)
  • 栈&队列OJ练习题(C语言版)

    目录 一、括号匹配问题 思路: 完整版C语言代码:   讲解: 二、用队列实现栈 思路: 完整版C语言代码:  讲解:  三、用栈实现队列 思路: 完整版C语言代码: 讲解: 四、 设计循环队列 思路: 完整版C语言代码: 讲解: 如果栈和队列忘了,不妨看看小生的这两篇复习

    2024年02月07日
    浏览(28)
  • 【C++ OJ练习】5.字符串最后一个单词的长度

    字符串最后一个单词的长度_牛客题霸_牛客网 倒着找第一个空格的下标 用下标之间的差来计算  【C++ OJ练习】5.字符串最后一个单词的长度 完

    2024年02月13日
    浏览(31)
  • 【LeetCode】【C++】string OJ必刷题

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 【LeetCode】415.字符串相加 【LeetCode】43.字符串相乘   【LeetCode】125.验证回文字符串 【

    2024年02月05日
    浏览(26)
  • 每日OJ题_算法_滑动窗口⑧_力扣76. 最小覆盖子串

    目录 力扣76. 最小覆盖子串 解析及代码 76. 最小覆盖子串 - 力扣(LeetCode) 难度 困难 给你一个字符串  s  、一个字符串  t  。返回  s  中涵盖  t  所有字符的最小子串。如果  s  中不存在涵盖  t  所有字符的子串,则返回空字符串  \\\"\\\"  。 注意: 对于  t  中重复字符,

    2024年01月23日
    浏览(29)
  • 每日练习---C语言

    目录 前言: 1.打印菱形 1.1补充练习  2.打印水仙花 2.1补充训练   记录博主做题的收获,以及提升自己的代码能力,今天写的题目是: 打印菱形、打印水仙花数 。   我们先看到牛客网的题:OJ链接    题目解析:多组输入一个值(我们用n来控制)用来控制菱形的打印。  

    2024年02月05日
    浏览(21)
  • 【LeetCode】栈和队列OJ题---C语言版

    点击链接 点击链接 解题思路: 此题可以用两个队列去实现一个栈,每次始终保持一个队列为空, 入栈操作相当于给非空队列进行入队操作 出栈操作相当于非空队列的队尾元素出队,此时需要把非空队列除最后一个元素之外的其余元素入队到空队列,然后出队最后一个队尾

    2024年02月05日
    浏览(27)
  • 每日OJ题_算法_滑动窗口⑦_力扣30. 串联所有单词的子串

    目录 力扣30. 串联所有单词的子串 解析及代码 30. 串联所有单词的子串 - 力扣(LeetCode) 难度 困难 给定一个字符串  s   和一个字符串数组  words 。   words  中所有字符串  长度相同 。   s   中的  串联子串  是指一个包含   words  中所有字符串以任意顺序排列连接起来的

    2024年01月21日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包