leetcode 日经贴,Cpp code -Scramble String

来源:互联网 发布:北京java程序员培训班 编辑:程序博客网 时间:2024/06/03 16:25

Scramble String

class Solution {public:    bool isScramble2(string s1, string s2) {        int n = s1.length();        if (n <= 3) return true;        //from left        int match = 0;        for (int i = 0; i < n; ++i) {            ++count[s1[i]];            if(count[s1[i]] == 0) --match;            else if(count[s1[i]] == 1) ++match;            --count[s2[i]];            if(count[s2[i]] == 0) --match;            else if(count[s2[i]] == -1) ++match;            if (match == 0 && i < n - 1) {                if (isScramble2(s1.substr(0, i + 1), s2.substr(0, i + 1)) &&                    isScramble2(s1.substr(i + 1, n - i - 1), s2.substr(i + 1, n - i - 1)))                    return true;                break;            }        }        //from right        for (int i = 0; i < n; ++i) {            ++count[s1[i]];            if(count[s1[i]] == 0) --match;            else if(count[s1[i]] == 1) ++match;            --count[s2[n - 1 - i]];            if(count[s2[n - 1 - i]] == 0) --match;            else if(count[s2[n - 1 - i]] == -1) ++match;            if (match == 0 && i < n - 1) {                if (isScramble2(s1.substr(0, i + 1), s2.substr(n - 1 - i, i + 1)) &&                    isScramble2(s1.substr(i + 1, n - i - 1), s2.substr(0, n - i - 1)))                    return true;                break;            }        }        return false;    }    bool isScramble(string s1, string s2) {        if (s1.length() != s2.length())            return false;        memset(count, 0, sizeof(count));        string ss1 = s1, ss2 = s2;        sort(ss1.begin(), ss1.end());        sort(ss2.begin(), ss2.end());        for (int i = 0; i < s1.length(); ++i) {            if (ss1[i] != ss2[i]) return false;        }        return isScramble2(s1, s2);    }private:    int count[256];};


0 0
原创粉丝点击