0. 问题
用C或者C++实现翻转一个以null结尾的字符串,不得申请额外空间。
1. 实现
思路:不分配空间直接就地翻转,采用首位交换的方式进行,并去掉末尾的null
time:o(n)
space:o(1)
void reverse(char *str){
char* end = str;
char temp;
if(str){
while(*end){
++end; // 找到字符串的末尾
}
--end; //回退一个字符,去掉null
// 对字符串进行首尾翻转
//需要注意C++中指针和引用的区别,指针中存储的是一个地址,引用是变量的一个别名
while(str < end){
temp = *str;
*str ++ = *end;
*end -- = temp;
}
}
}
2. 其他实现
如果不考虑严格的条件,只考虑可以实现的方式。下面的方法也可以,但是时间和空间复杂度没有上面的方法好。
- 可以采用递归进行翻转实现
- 可以使用栈进行翻转
- 可以再申请一个字符串数据进行翻转