【劍指offer】左旋轉字符串,C+實現
阿新 • • 發佈:2018-05-03
ews 試用 name DC http ref tst solution otto
原創博文,轉載請註明出處!
本題牛客網地址
本題代碼的github地址
本系列文章的索引地址
# 題目
# 思路
先局部翻轉,後整體翻轉。舉例:abcdefg先局部翻轉為bagfedc,後整體翻轉為cdefgab。
# 代碼
#include <iostream> #include <string> using namespace std; class Solution { public: string LeftRotateString(string &str, int n) { int len = str.size();// 特殊輸入 if(!str.empty() && n <= len && n >= 0) { int pFirstStart = 0; int pFirstEnd = n - 1; int pSecondStart = n; int pSecondEnd = len - 1; // 翻轉字符串的前面n個字符 reverse(str, pFirstStart, pFirstEnd);// 翻轉字符串的後面部分 reverse(str, pSecondStart, pSecondEnd); // 翻轉整個字符串 reverse(str, pFirstStart, pSecondEnd); } return str; } // 翻轉函數 void reverse(string &str, int begin, int end) { while(begin < end) { char tmp= str[begin]; str[begin] = str[end]; str[end] = tmp; begin++; end--; } } }; int main() { // 測試用例 string str = "abcdefg"; int n = 2; // 函數調用 Solution solution; solution.LeftRotateString(str,n); cout<<str<<endl; return 0; }
【劍指offer】左旋轉字符串,C+實現