一開始以為很難, 其實就是遞歸判斷,只要第一次做錯的原因是我以為分割點是中間,其實是每一個點都可以是分割點,想想2叉樹就想懂的。 2刷應該就用dp吧, 這個也在手動刷一次!理解多一次
class Solution {public: bool isScramble(string s1, string s2) { if(s1 == s2) return true; if(s1.length() == 0) return true; if(s1.length() != s2.length()) return false; int mark[26]; int n = s1.length(); memset(mark, 0, sizeof(mark)); for(int i = 0; i < n; ++ i){ mark[s1[i] - 'a']++; mark[s2[i] - 'a']--; } for(int i = 0; i < 26; ++ i) if(mark[i] != 0) return false; for(int i = 1; i < n; ++ i){ if((isScramble(s1.substr(0, i), s2.substr(0, i)) && isScramble(s1.substr(i), s2.substr(i))) || (isScramble(s1.substr(0, i), s2.substr(s1.size()-i)) && isScramble(s1.substr(i), s2.substr(0, s1.size()-i))) ) return true; } return false; }};新聞熱點
疑難解答