题目:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一次:
class Solution {
public:
string reverseLeftWords(string s, int n) {
int count = n;
while (count) {
for (int i = count - 1; i <= count - 1 + s.length() - n - 1; ++i) {
s[i] ^= s[i + 1];
s[i + 1] ^= s[i];
s[i] ^= s[i + 1];
}
count--;
}
return s;
}
};
第二次:
class Solution {
public:
string reverseLeftWords(string s, int n) {
return s.substr(n,s.length()) + s.substr(0,n);
}
};
总结:
1. 字符串中的字符交换 可以通过异或 a^=b b^= a a^=b 即可完成 a b 互换,不需要第三方变量,且效率极高,不过这里用了循环,时间复杂度为O(N),不用循环明显要快捷,不过异或互换 提供了另外一中可行性;