题目要求
- 写一个函数进行string字符串逆转。
要求不允许分配另一个额外的字符串数组,只允许在输入字符串数组上,就地进行修改(空间复杂度O(1))。也就是说,只允许额外创建一个临时变量。
Example 1:
Input: [“h”,“e”,“l”,“l”,“o”]
Output: [“o”,“l”,“l”,“e”,“h”]
思路:我们都知道交换两个元素的方法,就是创建一个临时变量存储,然后交换即可。string字符串数组转换无非就是好几组两两交换的实现。
举个栗子
代码
我们可以借助迭代器,进行实现,然后创建一个变量char存储中间变量。
由于两两交换,所以需要交换的次数就是n / 2 ,其中n为字符串长度,考虑了奇偶的情况。
两个迭代器,一个从头自增,一个从尾部自减,使用这两个获取图1 的元素交换,例如:首先,交换h和o;则*begin交换*end元素,如图2所示
void reverseString(vector<char>& s) {
vector<char>::iterator begin,end;
int size = s.size();
int middle;
//加入判断条件,为0时直接返回
if(size == 0 || size ==1)
return;
middle = size / 2;
begin = s.begin();
end = s.end()-1;
for(int i = 0; i < middle ; ++i)
{
char temp;
temp = *begin;
*begin = *end;
*end = temp;
begin++;
end--;
}
需要注意这里注意end()返回的是尾后迭代器,其不指向任何元素,初始化需要减一指向最后一个元素,如o;而begin初始则指向h;
这样就大功告成了,总结:需要多分类讨论极端情况,如字符串长度为0或1直接返回即可。