校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 算法 > 字符串算法
题目

字符串反转, 如“abcdefg”变为“gfedcba”,要求空间复杂度为O(1), 时间复杂度尽量低

解答

思路:

1.因为空间复杂度为o(1),不能采用new一个字符串空间,反向赋值;

2.可以想到,反转就是第一个字符跟倒数第一个字符对换,第二个跟倒数第二个… ;

3.设置两个指针head, rear ,分别放在第一位和倒数最后一位,然后向中间移动,

即可完成反转;

4.<条件反射>,要交换指针,一定设置记录结点p, 上来直接写。

核心代码
Char[] reverse( char[] str)
{
if(str.length == 0) //错误情况
return str;
int head = 0;
int rear = str.length -1;
char p; //记录结点
while( rear > head) {
p = str[rear]
str[rear]= str[head];
str[head] = p;
--rear; ++head;
}
return str;
}



C 1条回复 评论
Vincent

这么久了终于弄明白这个问题

发表于 2021-09-14 12:20:00
0 0