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