leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String

344. Reverse String

最基础的旋转字符串

class Solution {
public:
    void reverseString(vector<char>& s) {
        if(s.empty())
            return;
        int start = 0;
        int end = s.size() - 1;
        while(start < end){
            char tmp = s[end];
            s[end] = s[start];
            s[start] = tmp;
            start++;
            end--;
        }
        return;
    }
};

541. Reverse String II

旋转k个字符,然后间隔k个字符不旋转,再旋转k个字符。z

注意:一般最后都会剩下几个不够k个的字符,如果这些字符的前一次字符进行了旋转,就不旋转;如果前一次没有进行旋转,就需要旋转。其实就是奇数次旋转,偶数次不旋转

class Solution {
public:
    string reverseStr(string s, int k) {
        if(s.empty())
            return "";
        int m = s.size()/k;
        int i = 0;
        for(;i < m;i++){
            if(i % 2 == 0)
                reverse(s,i*k,(i+1)*k - 1);
        }
        if(i % 2 == 0)
            reverse(s,i*k,s.size()-1);
        return s;
    }
    void reverse(string& s,int start,int end){
        while(start < end){
            char tmp = s[end];
            s[end] = s[start];
            s[start] = tmp;
            start++;
            end--;
        }
        return;
    }
};

 796. Rotate String

 暴力方法就是将A每个位置就行旋转然后和B进行比较判断

本方法:如果A、B个数相等,如果(A+A)中包含B的话,说明A一定能通过偏移得到B

class Solution {
public:
    bool rotateString(string A, string B) {
         return A.size() == B.size() && (A + A).find(B) != string::npos;
    }
};

http://www.cnblogs.com/grandyang/p/9251578.html

string的find函数找不到返回的是npos,不是true、false,也不是-1

https://blog.csdn.net/qq_33933704/article/details/79188028

猜你喜欢

转载自www.cnblogs.com/ymjyqsx/p/10730728.html