1. 程式人生 > >leetcode第一刷_Scramble String

leetcode第一刷_Scramble String

false rac leet 是把 相等 得到 能夠 新的 eas

字符串的好題。

題幹解釋的很復雜。一下讓人不知所措了。

這道題究竟是什麽意思呢?終於的結果是把一個字符串中字母的順序打亂了,讓你推斷一個字符串能不能由還有一個字符串打亂得到。那打亂這個過程是怎麽做的呢,非常easy。給你一個字符串,你必須先找一個點把它砍成兩半,你能夠通過交換這兩半的順序來打亂源字符串的順序,也就是在兩半中的字符與還有一半中全部字符的相對順序是統一的。對於每一半。都能夠反復上面的過程。

那想一下,怎麽知道打斷的那個點在哪呢?窮舉。怎麽知道打斷之後有沒有做交換操作呢?兩種情況遞歸。有一條走的通就能夠了。還有個問題。兩個字符串中包括的字符一定是全然一樣的,如何確定這一點呢?最暴力的方式。新開兩個字符串,排序,推斷這兩個新的相不相等。

class Solution {
public:
    bool isScramble(string s1, string s2) {
        if(s1 == "" && s2 == "")
            return true;
        if(s1.length() != s2.length())
            return false;
        if(s1 == s2)
            return true;
        string s11(s1), s22(s2);
        sort(s11.begin(), s11.end()); sort(s22.begin(), s22.end());
        if(s11 != s22)
            return false;
        for(int i=1;i<s1.length();i++){
            if(isScramble(s1.substr(0, i), s2.substr(0, i))&&isScramble(s1.substr(i, s1.length()-i), s2.substr(i, s2.length()-i)))
                return true;
            else if(isScramble(s1.substr(0, i), s2.substr(s2.length()-i, i))&&isScramble(s1.substr(i, s1.length()-i), s2.substr(0, s2.length()-i)))
                return true;
        }
        return false;
    }
};


leetcode第一刷_Scramble String