码迷,mamicode.com
首页 > 其他好文 > 详细

(动态规划、递归) leetcode 87. Scramble String

时间:2019-07-20 11:38:59      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:data   表示   ++   字典   src   bst   题目   开始   思路   

技术图片

技术图片

思路:用递归来做感觉比动态规划简单,题目让我们判断s1和s2是否是scramble string,则s1上(从左起计数)有一个长度为 i 的分割点将s1分为s1_l 和 s1_r 两段 分别与 s2的(从左起计数一个长度为i的) s2_l 和 s2_r 互为 scramble string;或者与 s2的(从右起计数一个长度为i的)s2.substr(s-i) 和 s2.substr(0, s-i) 互为 scramble string 。

1)C++ 中的 substr(pos, len) 表示从 索引为pos开始的子字符串,截取长度为len的子串,即子串的索引为[pos, pos+len) 注意是左闭右开区间; substr(pos) 表示从索引pos开始到字符串末尾的子字符串,即 [pos, size ) size为字符串长度,注意是左闭右开区间。

2)sort() 可以按字典序排列 string 类型的字符串。

3)== 可以用来判断两个字符串是否相同。

class Solution {
public:
    bool isScramble(string s1, string s2) {
        int s = s2.size(); 
        if(s1.size()!=s2.size())
            return false;
        if(s1==s2)
            return true;
        string str1 = s1, str2 = s2;
        sort(str1.begin(), str1.end());
        sort(str2.begin(), str2.end());
        if(str1 != str2)
            return false;
        for(int i=1; i<s1.size(); ++i){
            string st1_l = s1.substr(0, i), st1_r = s1.substr(i);
            string st2_l = s2.substr(0, i), st2_r = s2.substr(i);
            if((isScramble(st1_l, st2_l) && isScramble(st1_r, st2_r)) || ( isScramble(st1_l, s2.substr(s-i) ) && isScramble(st1_r, s2.substr(0, s-i) ) ))
                return true;
        }
        return false;
        
    }
};

 

(动态规划、递归) leetcode 87. Scramble String

标签:data   表示   ++   字典   src   bst   题目   开始   思路   

原文地址:https://www.cnblogs.com/Bella2017/p/11217098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!