分析:
- 非递归:设置两个指针,分别指向string的首(i)尾(j),然后交换两个位置上字符值;更新指针,i++,j–,直至i>j。
- 递归:分治思想,不断将string拆分成两部分,并一直折半拆分下去,直到字符串本身仅剩1个字符。
代码:
- 非递归(C):
char* reverseString(char* s) {
if(s)
{
int len=strlen(s);
int i=0,j=len-1;
for(;i<=j;i++,j--)
{
char temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
return s;
}
- 递归(C):
char* reverseString(char* s) {
if (s)
{
int len = strlen(s);
if (len <= 1) return s;
char *left = (char*)malloc(len / 2 + 1);
strncpy(left, s, len / 2);
left[len / 2] = '\0';
char *right = (char*)malloc(len - len / 2 + 1);
strncpy(right, s + len / 2, len - len / 2 + 1);
char *ret = (char*)malloc(len + 1);
strncpy(ret, reverseString(right), strlen(right) + 1);
strncat(ret, reverseString(left), strlen(left) + 1);
return ret;
}
return s;
}
- 递归(C++):
class Solution {
public:
string reverseString(string s) {
int len=s.size();
if(len<=1) return s;
return reverseString(s.substr(len/2,len-len/2))+reverseString(s.substr(0,len/2));
}
};