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

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

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

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

                                              

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月11日
下一篇 2023年12月11日

相关推荐