代码随想录leetcode200题之字符串

1 介绍

本博客用来记录代码随想录leetcode200题中字符串部分的题目。

2 训练

题目1344. 反转字符串

C++代码如下,

class Solution {
public:
    void reverseString(vector<char>& s) {
        int i = 0, j = s.size() - 1;
        while (i <= j) swap(s[i++], s[j--]);
        return;
    }
};

python3代码如下,

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        i = 0
        j = len(s) - 1
        while i <= j:
            s[i], s[j] = s[j], s[i]
            i += 1
            j -= 1
        return 

题目2541. 反转字符串 II

C++代码如下,

class Solution {
public:
    string reverseStr(string s, int k) {
        int n = s.size();
        for (int i = 0; i < n; i += 2 * k) {
            //[i,i+2*k)
            //将[i,i+k)翻转
            int l = i;
            int r = min(i + k - 1, n - 1);
            while (l <= r) {
                swap(s[l], s[r]);
                l++;
                r--;
            }
        }
        return s;
    }
};

python3代码如下,

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        i = 0
        n = len(s)
        s = list(s)
        while i < n:
            l = i 
            r = int(i + k - 1)
            r = min(r, n - 1)
            while l <= r:
                s[l], s[r] = s[r], s[l]
                l += 1
                r -= 1

            i += int(2 * k)
        s = "".join(s)
        return s 

题目354. 替换数字(第八期模拟笔试)

C++代码如下,

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;
    
    string res;
    for (auto c : s) {
        if (c >= 'a' && c <= 'z') res += c;
        else res += "number";
    }
    cout << res << endl;
    
    return 0;
}

python3代码如下,

s = str(input())
res = ""
for c in s:
    if c.isdigit():
        res += "number"
    else:
        res += c 
print(res)

题目4151. 反转字符串中的单词

C++代码如下,

class Solution {
public:
    string reverseWords(string s) {
        vector<string> words;
        int n = s.size();
        for (int i = 0; i < n; ++i) {
            if (s[i] != ' ') {
                string t = "";
                while (i < n && s[i] != ' ') {
                    t += s[i];
                    i += 1;
                }
                words.emplace_back(t);
            }
        }

        reverse(words.begin(), words.end());
        string res = "";
        for (auto word : words) {
            res += word + " ";
        }
        res = res.substr(0, res.size()-1);
        return res;
    }
};

python3代码如下,

class Solution:
    def reverseWords(self, s: str) -> str:
        ls = s.split()
        ls = ls[::-1]
        res = ""
        for x in ls:
            res += x + " "
        res = res[0:-1]
        return res

题目555. 右旋字符串(第八期模拟笔试)

C++代码如下,

#include <iostream>
#include <string>

using namespace std;

int main() {
    int k;
    string s;
    cin >> k >> s;
    int n = s.size();
    string res = s.substr(n-k) + s.substr(0,n-k);
    cout << res << endl;
    
    return 0;
}

python3代码如下,

k = int(input())
s = str(input())
n = len(s)
res = s[n-k:] + s[0:n-k]
print(res)

题目628. 找出字符串中第一个匹配项的下标

C++代码如下,

class Solution {
public:
    int strStr(string haystack, string needle) {
        return haystack.find(needle);
    }
};

python3代码如下,

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        return haystack.find(needle)

题目7459. 重复的子字符串

C++代码如下,

class Solution {
public:
    bool check(string& t, string& s) {
        int k = s.size() / t.size();
        string ts = "";
        for (int i = 0; i < k; ++i) ts += t;
        return ts == s;
    }

    bool repeatedSubstringPattern(string s) {
        int n = s.size();
        for (int i = 0; i < n / 2; ++i) {
            string t = s.substr(0, i + 1);
            if ((n % (i+1) == 0) && check(t, s)) return true;
        }
        return false;
    }
};

python3代码如下,

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        n = len(s)
        for i in range(n // 2):
            if n % (i + 1) == 0:
                t = s[0:i+1]
                k = n // (i + 1)
                ts = t * k
                if ts == s:
                    return True 
        return False

3 参考

代码随想录官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YMWM_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值