一网打尽 反转字符串

面试可能不会出这种题目送血,但是笔试经常有,下面就LeetCode当中所有反转字符串的题目全部一网打尽。反转链表也是一类经典的题目,值得专门写一篇blog,本文不表。

目录

直接reverse:LeetCode344.反转字符串

进阶reverse:LeetCode541.反转字符串 II

终极reverse+双指针:LeetCode557.反转字符串中的单词 III

重构字符串:LeetCode剑指offer 58 - II.左旋转字符串

处理溢出:LeetCode7.整数反转

双指针:LeetCode917.仅仅反转字母

双指针+建立字典:LeetCode345.反转字符串中的元音字母


直接reverse:LeetCode344.反转字符串

一网打尽 反转字符串_第1张图片

class Solution {
public:
    void reverseString(vector& s) {
        reverse(s.begin(),s.end());
    }
};

进阶reverse:LeetCode541.反转字符串 II

一网打尽 反转字符串_第2张图片

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

终极reverse+双指针:LeetCode557.反转字符串中的单词 III

一网打尽 反转字符串_第3张图片

class Solution {
public:
    string reverseWords(string s) {
        // 用双指针指定两个空格之间的位置
        int i, j;
        i = j = 0;
        while (j < s.size()) {
            while (s[j] != ' ' && j < s.size())
                j++;
            reverse(s.begin()+i, s.begin()+j);
            i = ++j;
        }
        return s;
    }
};

重构字符串:LeetCode剑指offer 58 - II.左旋转字符串

直接按照题意重构一个字符串最为方便

一网打尽 反转字符串_第4张图片

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        string s1;
        for(int i=n;i

处理溢出:LeetCode7.整数反转

一网打尽 反转字符串_第5张图片

处理溢出自己尝试了很多次没有搞定,还是看题解学习学习!

一网打尽 反转字符串_第6张图片

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            // 这题最麻烦的地方就是处理溢出的情况
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) 
                return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) 
                return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

双指针:LeetCode917.仅仅反转字母

一网打尽 反转字符串_第7张图片

class Solution {
public:
    string reverseOnlyLetters(string S) {
        // 双指针
        int i=-1;
        int j=S.size();
        while(i

双指针+建立字典:LeetCode345.反转字符串中的元音字母

一网打尽 反转字符串_第8张图片

class Solution {
public:
    string reverseVowels(string s) {
        // 双指针
        int i = 0;
        int j = s.size() - 1;
        // 建立字典方便while写判断条件
        string dic = "aeiouAEIOU";
        while (i < j) {
            while (dic.find(s[i])== -1 && i < j) 
                i++;
            while (dic.find(s[j])== -1 && i < j) 
                j--;
            if (i < j)
                swap(s[i++], s[j--]); 
        }
        return s;
    }
};

 

你可能感兴趣的:(LeetCode,LeetCode经典,算法—STL与数据结构)