「程式碼隨想錄演算法訓練營」第七天 | 字串 part1

云雀AC了一整天發表於2024-07-10

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

第一次在卡碼網上刷題,和力扣感覺不太一樣。

相關文章