仅通过交换就可以将字符串字符移动两个单位。我知道我们可以轻松地通过第二数组来做到这一点。那只交换呢?有没有办法证明解决方案是否存在?
void stringShift(std::string& string, std::size_t count) {
count %= string.size();
for (long long i = string.size() - count - 1; i >= 0; --i) {
std::swap(string[i], string[i + count]);
}
}
出于效率考虑,可以添加对count != 0
的检查。
您可以使用std::reverse
中的<algorithm>
并适当调整位置:
std::string s = "hacker";
std::reverse(s.begin(), s.begin()+(s.size()-2);
std::reverse(s.begin()+(s.size()-2), s.end());
std::reverse(s.begin(), s.end());
std::cout << s;
输出:erhack