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

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

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

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

                                             

目录
相关文章
|
6月前
|
算法 C语言 容器
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(上)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
48 0
|
5月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)
|
6月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
54 2
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
|
5月前
|
C++
C++小练习:猜数游戏
C++小练习:猜数游戏
|
6月前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
66 7
|
6月前
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
57 1
|
6月前
|
算法 C语言 C++
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(上)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
42 1
|
6月前
|
存储 前端开发 算法
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(下)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
21 0
|
6月前
|
算法 C语言 C++
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(中)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
156 1
|
6月前
|
存储 C语言
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(中)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
38 0