仅通过交换就可以将字符串字符移动两个单位吗?

问题描述 投票:1回答:2

仅通过交换就可以将字符串字符移动两个单位。我知道我们可以轻松地通过第二数组来做到这一点。那只交换呢?有没有办法证明解决方案是否存在?

c++ algorithm c++11 swap
2个回答
1
投票
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的检查。


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

© www.soinside.com 2019 - 2024. All rights reserved.