Tony's Log

Algorithms, Distributed System, Machine Learning

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

I have to admit that I'm still an algorithm rookie: in front of a problem, I got lost on what the nature of the problem is.. usually I made everything too complex unnecessarily. 

As the graph on the page shows, it is recursive model. So DFS with pruning is a good choice: http://zhaohongze.com/wordpress/2013/12/12/leetcode-scramble-string/

My code:

class Solution {
public:
    bool hasSameLetters(string s1, string s2)
    {
        std::sort(s1.begin(), s1.end());
        std::sort(s2.begin(), s2.end());
        return s1.compare(s2) == 0;
    }
    bool isScramble(string s1, string s2) {
        size_t len1 = s1.length();
        size_t len2 = s2.length();
        if (len1 != len2) return false;

        //    Base case: len 1 and 2
        if (len1 == 1)
            return s1 == s2;
        else if (len1 == 2)
            return (s1[0] == s2[0] && s1[1] == s2[1]) || (s1[0] == s2[1] && s1[1] == s2[0]);

        if (s1.compare(s2) == 0) return true;
        //
        for (int k = 1; k < len1; k++)
        {
            string s11 = s1.substr(0, k);
            string s12 = s1.substr(k, len1 - k);
            string s21 = s2.substr(0, k);
            string s22 = s2.substr(k, len1 - k);

            if (hasSameLetters(s11, s21) && hasSameLetters(s12, s22))                
                if (isScramble(s11, s21) && isScramble(s12, s22))
                    return true;

            if (hasSameLetters(s11, s22) && hasSameLetters(s12, s21))
                if (isScramble(s11, s22) && isScramble(s12, s21))
                    return true;

            s21 = s2.substr(0, len2 - k);
            s22 = s2.substr(len2 - k, k);

            if (hasSameLetters(s11, s21) && hasSameLetters(s12, s22))
                if (isScramble(s11, s21) && isScramble(s12, s22))
                    return true;

            if (hasSameLetters(s11, s22) && hasSameLetters(s12, s21))
                if (isScramble(s11, s22) && isScramble(s12, s21))
                    return true;
        }

        return false;
    }
};
posted on 2014-08-24 07:23  Tonix  阅读(159)  评论(0编辑  收藏  举报