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

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

编程题:

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

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

示例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)

示例 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)

思路一:

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

第二步:从下标为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;
  }
};

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

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

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

                                             

目录
相关文章
|
1月前
|
C++
C++:OJ练习(每日练习系列)
C++:OJ练习(每日练习系列)
34 2
|
4月前
|
存储 C++ 容器
【C++&数据结构】二叉树(结合C++)的经典oj例题 [ 盘点&全面解析 ](24)
【C++&数据结构】二叉树(结合C++)的经典oj例题 [ 盘点&全面解析 ](24)
|
3月前
|
C++
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
54 0
|
1月前
|
Serverless C++
C++:OJ练习(每日练习!)
C++:OJ练习(每日练习!)
33 0
|
3月前
|
C++ 索引
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)
42 0
|
2月前
|
Java C++ Python
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
29 0
|
2月前
|
Java C++ Python
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-161 Abbott’s Revenge(C++写法)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-161 Abbott’s Revenge(C++写法)
125 42
|
3月前
|
Linux C++ iOS开发
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
44 0
|
3月前
|
存储 C++ 容器
『 C++ 』二叉树进阶OJ题(下)
『 C++ 』二叉树进阶OJ题(下)
|
3月前
|
C++ 容器
『 C++ 』二叉树进阶OJ题(中)
『 C++ 』二叉树进阶OJ题(中)