LeetCode-Scramble String

class Solution {
public:
    bool isScramble(string s1, string s2) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        //f[len][i][j]表示長度爲len的以s1[i]開頭的字串和以s2[j]開頭的字串是否互爲scrambleString
        if (s1.size() != s2.size())
        {
            return false;
        }
        for (size_t i = 0; i < s1.size(); ++i)
        {
            for (size_t j = 0; j < s2.size(); ++j)
            {
                f[1][i][j] = s1[i] == s2[j];
            }
        }
        for (size_t len = 2; len <= s1.size(); ++len)
        {
            for (size_t s1beg = 0; s1beg < s1.size(); ++s1beg)
            {
                size_t s1end = s1beg + len - 1;
                if (s1end >= s1.size())
                {
                    break;
                }
                for (size_t s2beg = 0; s2beg < s2.size(); ++s2beg)
                {
                    size_t s2end = s2beg + len - 1;
                    if (s2end >= s2.size())
                    {
                        break;
                    }
                    for (size_t s1mid = s1beg; s1mid < s1end; ++s1mid)
                    {
                        size_t leftSize = s1mid - s1beg + 1;
                        size_t rightSize = len - leftSize;
                        size_t s2mid = s2beg + leftSize - 1;
                        bool res1 = f[leftSize][s1beg][s2beg] && f[rightSize][s1mid + 1][s2mid + 1];
                        s2mid = s2end -leftSize;
                        bool res2 = f[leftSize][s1beg][s2mid + 1] && f[rightSize][s1mid + 1][s2beg];
                        f[len][s1beg][s2beg] = res1 || res2;
                        if (f[len][s1beg][s2beg])
                        {
                            break;
                        }
                    }
                }
            }
        }
        return f[s1.size()][0][0];
    }
private:
    bool f[100][100][100];
};

參考:http://www.cnblogs.com/remlostime/archive/2012/11/19/2778108.html

發佈了124 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章