【Leetcode344】. Reverse String-題解

題目
分析:

  1. 非遞歸:設置兩個指針,分別指向string的首(i)尾(j),然後交換兩個位置上字符值;更新指針,i++,j–,直至i>j。
  2. 遞歸:分治思想,不斷將string拆分成兩部分,並一直折半拆分下去,直到字符串本身僅剩1個字符。

代碼:

  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;
}
  1. 遞歸(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;
}
  1. 遞歸(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));
    }
};
發佈了26 篇原創文章 · 獲贊 31 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章