字串的好題。題幹解釋的非常複雜,一下讓人不知所措了。
這道題到底是什麼意思呢?最終的結果是把一個字串中字母的順序打亂了,讓你判斷一個字串能不能由另一個字串打亂得到。那打亂這個過程是怎麼做的呢,很簡單,給你一個字串,你必須先找一個點把它砍成兩半,你可以通過交換這兩半的順序來打亂源字串的順序,也就是在兩半中的字元與另一半中所有字元的相對順序是統一的。對於每一半,都可以重複上面的過程。
那想一下,怎麼知道打斷的那個點在哪呢?窮舉。怎麼知道打斷之後有沒有做交換操作呢?兩種情況遞迴,有一條走的通就可以了。還有個問題,兩個字串中包含的字元一定是完全一樣的,怎樣確定這一點呢?最暴力的方式,新開兩個字串,排序,判斷這兩個新的相不相等。
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; }};