【水滴计划 | 每日两题】:反转字符串、反转字符串 II

88 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

1、写在前面

大家好,我是翼同学,这里是【水滴计划 | 刷题日志】

每日两题,拒绝摆烂。

2、内容

2.1、题目一:反转字符串

链接:344. 反转字符串 - 力扣(LeetCode)

(1) 描述

image.png

(2) 举例

image.png

image.png

image.png

(3) 解题

利用双指针解法即可。

参考代码如下:

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

2.2、题目二:反转字符串 II

链接:541. 反转字符串 II - 力扣(LeetCode)

(1) 描述

image.png

(2) 举例

image.png

image.png

(3) 解题

参考代码一:

class Solution {
public:
    string reverseStr(string s, int k) {
        // for循环遍历字符串,循环变量更新语句为 i += (2*k)
        for (int i = 0; i < s.size(); i += (2*k)) {
            // 如果剩余字符的个数范围为:[k, 2k),则反转前 k 个字符
            if (i + k <= s.size()) {
                reverse(s.begin() + i, s.begin() + i + k );
            } 
            // 如果剩余字符的个数范围为:[0, k),则将剩余字符全部反转
            else {
                reverse(s.begin() + i, s.end());
            }
        }
        // 最后返回字符串 s
        return s;
    }
};

参考代码二:

class Solution {
public:
    // 编写一个功能函数,返回较小值
    int min (int i, int j ) {
        return (i<=j) ? i : j;
    }
    string reverseStr(string s, int k) {
        // for循环遍历字符串s
        for (int i = 0; i < s.length(); i += (2*k)) {
            // 进行反转
            reverse(s.begin()+i,  s.begin() + min(i + k, s.length()) );
        }
        // 最后返回结果
        return s;
    }
};

3、写在最后

好了,今天就刷到这里,明天再来。