/* 暴力方法:str + str 拼接起来,从 n 开始遍历 len */ classSolution { public: string LeftRotateString(string str, int n){ int len = str.size(); if (len == 0) return str; // str 为空 if (n >= len) n = n % len; // n 比 str 更大的情况
string temp = str + str; string res; res.resize(len); int index = 0; for (int i = n; i < n + len; i++) { res[index ++] = temp[i]; } return res; } };
/* 三次翻转 "...X...Y" -> "...Y...X" reverse("...X") -> "X......Y" reverse("...Y") -> "X...Y..." reverse("...X...Y") -> "...Y...X" */ classSolution { public: string LeftRotateString(string str, int n){ int m = str.size(); if (m == 0) return""; n = n % m; // 取余,每次长度为 m 的旋转相当于没有变化
reverse(str, 0, n - 1); reverse(str, n, m - 1); reverse(str, 0, m - 1); return str; }
voidreverse(string& str, int i, int j){ while (i < j) { char tmp = str[i]; str[i] = str[j]; str[j] = tmp; i++, j--; } } };