题目描述
请翻转一个字符串。
请使用原地算法,即不要给额外的数组分配空间,只能使用 $O(1)$ 的额外空间。
数据保证输入字符串中均是ASCII表中的可打印字符。
样例
给定 s = "hello", 输出 "olleh".
算法
(字符串处理) $O(n)$
一般可以用两个指针分别从首尾往中间扫描,交换两个指针指向的字符,直到两个指针相遇为止。
这里我们直接用C++中的逆向迭代器rbegin
和rend
,重新构造string
即可。
时间复杂度分析:整个字符串仅被遍历一次,所以时间复杂度是 $O(n)$。
C++ 代码
class Solution {
public:
void reverseString(vector<char>& s) {
for (int i = 0, j = s.size() - 1; i < j; i ++, j -- )
swap(s[i], s[j]);
}
};
好像 Leetcode 改题了,最新的函数参数是这样的
vector<char>& s
多谢提醒,代码已更新。
reverse(s.begin(),s.end());
也是可以的。
这个好像写错了,跟leetcode原题不符
已完善。