c++ - reverse() 函数是如何工作的?
问题描述
我正在尝试为每个 k、2k、3k..etc 位置反转 k 个字符,并且我使用了 reverse() 函数。为什么 reverse(s.begin() + l, s.begin() + r -1) 根本不改变字符串。如果我删除了 -1,它将完美运行。我是初学者,请给我一些解释。我很感激。
Input: s = "abcdefg", k = 2
Output: "bacdfeg"
MyOutput: "abcdefg"
class Solution {
public:
string reverseStr(string s, int k) {
int l = 0;
int r = min(k, (int)s.length());
while(l < s.length()){
reverse(s.begin() + l, s.begin() + r -1);
l += 2*k;
r = min(l + k, (int)s.length());
}
return s;
}
};
解决方案
你的逻辑有问题。考虑您的示例, k=2, s="abcdefg"
你的循环这样做:
while(l < s.length()){
reverse(s.begin() + l, s.begin() + r -1);
l += 2*k;
r = min(l + k, (int)s.length());
}
您第一次通过,l 为 0,r 为 2,调用:
reverse(s.begin() + 0, s.begin + 1)
结束迭代器紧跟在范围中的第一个元素之后,因此您正在反转单个元素,它什么都不做。
第二次通过,l 为 4,r 为 6
reverse(s.begin() + 4, s.begin() + 5)
另一个 1 元素范围,反转什么都不做。
然后循环结束。
我想问题是,如果它在不从 r 中减去 1 的情况下工作,那么为什么要从 r 中减去 1?
推荐阅读
- css - FullPageJS 防止汉堡菜单上的触摸滚动;如何整合?
- c# - 扩展时WPF窗口不跟随鼠标
- dynamics-crm - 如何使用 odata 端点检索地址
- css - 即使设置为全局,网站也会显示不同的字体大小
- javascript - 如何在 Javascript 中使用 RegExp 验证字符串?
- javascript - 在 JavaScript 中重构 JSON
- docker - 如何在不影响正在运行的 Pod 的情况下将新映像从 docker hub 拉到 kubernetes?
- angular - Sequelize 中两个查询的语法是什么?
- html - 我的 flex-grow 动画不能正常工作有什么问题吗?
- neo4j - 我可以将 Neo4J 浏览器与任何其他 GraphDB 一起使用吗?