目标:函数,它接受一个指向字符串的指针和两个长度,并在由长度表示的内部字符串之间进行交换,而不使用取决于输入大小的额外内存。例如,给定字符串“abcdef123”和长度 6,3,结果应该是“123abcdef”。
一种可能的递归实现(我的)是:
void invertStrings(char* str, int len1, int len2){
if(len1==0 || len2==0)
return;
if(len1>len2){
for(int i=0;i<len2;++i)
swapChars(str, len1+i, len1-len2+i);
invertStrings(str,len1-len2,len2);
}
else{
for(int i=0;i<len1;++i)
swapChars(str, len1+i, i);
invertStrings(str+len1,len1,len2-len1);
}
}
我认为时间复杂度是 O(len1+len2) 甚至可能是 O(max{len1,len2})。
问题:时间复杂度是多少,如何证明?谢谢。