(动态规划递归) leetcode 87. Scramble String
Posted bella2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(动态规划递归) leetcode 87. Scramble String相关的知识,希望对你有一定的参考价值。
思路:用递归来做感觉比动态规划简单,题目让我们判断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的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1137 第N个泰波那契数[动态规划 递归] HERODING的LeetCode之路
LeetCode 650 只有两个键的键盘[递归 动态规划] HRRODING的LeetCode之路