19号去笔试,有一道字符串逆置的程序题,当时苦苦想了好久最终还是时间不够作罢,现在想来真是捉急了。
题目大意是,输入一个字符串,比如,www.taobao.com,输出com.taobao.www。要求,时间复杂度O(n),空间复杂度O(1),返回逆置好的字符串地址。
当时纠结中空间复杂度上,不知道O(1)应该怎么实现。还是这种程序设计做的不够多吧,今后要多加练习了。回来之后想了一下,这个算是很简单送分的题目了,但是还是没有把握好,应该是悲剧了,唉……下面是自己写的代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse(char *p, char *q)
{
char temp;
while(p<q)
{
temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
}
char* reverseStr(char *p)
{
char *start=p;
char *end=p;
while(*end!='\0')
{
while(*end!='\0'&&*end!='.')
end++;
reverse(start, end-1);
if(*end!='\0')
{
end++;
start=end;
}
}
start=p;
end--;
reverse(start,end);
return p;
}
int main()
{
char str[100];
printf("input string:\n");
scanf("%s",str);
char* result=reverseStr(str);
printf("result:\n%s\n",str);
return 0;
}
这个在校招面试的时候一面面试官又问到了这个问题,好吧,换了个马甲我竟然没反应过来,智商拙计了