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

leetcode Scramble String 解题思路

时间:2016-04-12 19:24:24      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

 

 

https://leetcode.com/problems/scramble-string/

 

首先递归,或说是递推是最容易想到的:

 

F(s1(i,j), s2(i,j)) = F(s1(i,k),s2(i,k)) && F(s1(j-k,j),s2((j-k,j))  

                              || F(s1(i,k),s2(j-k,j)) && F(s1(j-k,j),s2(i,k))  i<k<j;

 

 

图解:

 技术分享

F(s1, s2) = F(s11,s21) && F(s12,s22)

                     || F(s11,s22) && F(s12,s21)  i<k<j;

 

 

简单的用递归编程会超时, 因为有太多重复的计算, 因此, 我们希望能够减少重复,即每个状态只计算一次, 通常, 这样的状态会用一个矩阵来记录状态。对于这个问题, 一个简单的矩阵不够用, 需要多个矩阵。

 

先看一些简单的, 是或不是scramble string的状态:

 

 

 技术分享

 

总结出规律: 对角有一组满足,都是true, 就是scramble string。

 

 

 技术分享

 

 

再看一个3个字母的演化情况:

 

 技术分享

 

当维度再一步扩大的时候, 还要综合考虑前面数个表的组合判断,这里我偷懒不画, 原理其实是一样的。

 

 

代码地址:

https://github.com/LKF10051/LeetCode/blob/master/LeetCode/scramble_string.cpp

 

leetcode Scramble String 解题思路

标签:

原文地址:http://www.cnblogs.com/luikimfai/p/5383803.html

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