classSolution { public: voidreverse(string& s, int i, int j){ while (i < j) { swap(s[i++], s[j--]); } } stringreverseWords(string s){ int i = 0, j = 0; while (s[j] != '\0') { if (s[j] == ' ') { reverse(s, i, j - 1); //反转每一个 i = j + 1; } j++; } reverse(s, i, j - 1); //处理上面的最后一次循环
//整体反转一次 reverse(s, 0, j - 1); return s; } };
字符串左旋转-题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如输入字符串”abcdefg”和数字2,该函数将返回左旋转2位得到的结果”cdefgab”。
注意:
数据保证n小于等于输入字符串的长度。 样例 输入:”abcdefg” , n=2
输出:”cdefgab”
字符串左旋转-代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
classSolution { public: voidreverse(string& s, int i, int j ){ //对撞指针,往中间凑 while (i < j) { swap(s[i++], s[j--]); } } stringleftRotateString(string str, int k){ int n = str.size(); if (k == 0) return str; reverse(str, 0, k - 1); reverse(str, k, n - 1); reverse(str, 0, n - 1); return str; } };