算法记录Day 8 | 字符串part01

86 阅读1分钟

算法记录Day 8 | 字符串part01

LeetCode 344-反转字符串

题目链接:leetcode.cn/problems/re…

题解
class Solution {
   public:
    void reverseString(vector<char> &s) {
        int size = s.size();
        if (size < 2) {
            return;
        }
        int l = 0;
        int r = size - 1;
        while (l < r) {
            char temp = s[l];
            s[l] = s[r];
            s[r] = temp;
            l++;
            r--;
        }
    }
};

LeetCode 541-反转字符串II

题目链接:leetcode.cn/problems/re…

题解
class Solution {
   public:
    string reverseStr(string s, int k) {
        vector<char> c;
        for (auto e : s) {
            c.push_back(e);
        }
        int cnt = 2 * k;
        for (int i = 0; i < c.size();) {
            if (c.size() >= i + k) {
                // 反转前k个
                reverse(c, i, i + k - 1);
            } else {  //  剩余字符少于k, 剩下的全部反转
                reverse(c, i, c.size() - 1);
            }
            i = i + cnt;
        }
        string str(c.begin(), c.end());
        return str;
    }

    void reverse(vector<char> &c, int start, int end) {
        while (start < end) {
            char temp = c[start];
            c[start] = c[end];
            c[end] = temp;
            start++;
            end--;
        }
    }
};

151-翻转字符串里的单词

题目链接:leetcode.cn/problems/re…

题解
import "strings"
func reverseWords(s string) string {
    // 删除首位空格
    s = strings.TrimSpace(s)
    b: = [] byte(s)
    i, j: = len(b) - 1, len(b) - 1
    reverse: = make([] string, 0)
    for i >= 0 {
        // 搜索首个空格
        for i >= 0 && b[i] != ' ' {
                i--
            }
            // 添加单词
        reverse = append(reverse, string(b[i + 1: j + 1]))
            // 跳过单词间空格
        for i >= 0 && b[i] == ' ' {
                i--
            }
            // 指向下个单词的尾字符
        j = i
    }
    res: = strings.Join(reverse, " ")
    return res
}