劍指offer 43:左旋轉字串
阿新 • • 發佈:2018-12-30
1 兩倍串 擷取
2 三次翻轉
#include <iostream> #include <string> using namespace std; class Solution { public: //兩倍串擷取 string LeftRotationString(string str, int n) { if (str.length() == 0) { return " "; } n = n % str.length(); int len = str.length(); str = str + str;//兩倍串 return str.substr(n, len);//從下標為n擷取長度為str.length() } // 三次翻轉 // abc defg // cba defg // cba gfed // defgabc string LeftRotationString2(string str, int n) { if (str.length() == 0) { return " "; } n = n % str.size(); Reverse(str, 0, n - 1); Reverse(str, n, str.size() - 1); Reverse(str, 0, str.size() - 1); return str; } void Reverse(string &str, int left, int right) { while (left < right) { char temp = str[left]; str[left] = str[right]; str[right] = temp; //swap (str[left], str[right]); left++; right--; } } //牛客50%通過率 }; int main() { string str = "heliopix"; Solution s; cout << s.LeftRotationString2(str, 13) << endl; return 0; }