「代码随想录算法训练营」第七天 | 字符串 part1

344. 反转字符串

题目链接:https://leetcode.cn/problems/reverse-string/
题目难度:简单
文章讲解:https://programmercarl.com/0344.反转字符串.html
视频讲解: https://www.bilibili.com/video/BV1fV4y17748
题目状态:过!

个人思路:

就是使用双指针,在right > left的前提下将字符串遍历,并把rightleft的值相互交换。

实现代码:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int left = 0;
        int right = s.size() - 1;
        while(right > left) {
            char tmp = s[left];
            s[left] = s[right];
            s[right] = tmp;
            left++;
            right--;
        }
    }
};

541. 反转字符串 II

题目链接:https://leetcode.cn/problems/reverse-string-ii/
题目难度:简单
文章讲解:https://programmercarl.com/0541.反转字符串II.html
视频讲解: https://www.bilibili.com/video/BV1dT411j7NN
题目状态:过!!

个人思路:

看了半天的题目才看懂讲的什么意思,就是把字符串从前往后分为好几组,每组有k个元素,并把第1组、第3组、第5组……进行反转,而把第2组、第4组、第6组……保持不变。而剩下的元素如果没有k个元素,且处于奇数组中,将剩下的元素进行反转。看图示:

实现代码:

class Solution {
public:
    string reverseStr(string s, int k) {
        if(s.size() <= k) {
            reverse(s.begin(), s.end());
            return s;
        }
        int i = 1;
        while(k * i < s.size()) {
            reverse(s.begin() + k * (i - 1), s.begin() + k * i);
             i = i + 2;
        }
        reverse(s.begin() + k * (i - 1), s.end());
        return s;
    }
};

54. 替换数字(卡码网

题目链接:https://kamacoder.com/problempage.php?pid=1064
文章讲解:https://programmercarl.com/kama54.替换数字.html
题目状态:过!!!

个人思路:
拿空间换时间,直接创建一个空字符串res,判断输入的字符串元素是否为数字。若为数字,在res后面接上一个number,若不是数字,则在res后面接入该元素。

代码实现:

#include <iostream>
#include <string>

using namespace std;
using std::string;

class Solution {
public:
    string replaceNum(string s) {
        string res;
        for(auto &sCh : s) {
            if(!isdigit(sCh)) {
                res += sCh;
            } else {
                res += "number";
            }
        }
        return res;
    }
};

int main(void) {
    string s;
    cin >> s;
    Solution sol;
    cout << sol.replaceNum(s);
}

第一次在卡码网上刷题,和力扣感觉不太一样。

热门相关:功夫圣医   史上第一密探   女大学生的寄宿家庭   九阳剑圣   侯门弃女之妖孽丞相赖上门