87. Scramble String
problem description
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
Below is one possible representation of s1 = "great"
:
To scramble the string, we may choose any non-leaf node and swap its two children.
For example, if we choose the node "gr"
and swap its two children, it produces a scrambled string "rgeat"
.
We say that "rgeat"
is a scrambled string of "great"
.
Similarly, if we continue to swap the children of nodes "eat"
and "at"
, it produces a scrambled string "rgtae"
.
We say that "rgtae"
is a scrambled string of "great"
.
Given two strings s1 and s2 of the same length, determine if s2 is a scrambled string of s1.
Example 1:
Example 2:
algorithm thought
判断是否Scramble,可以用递归的方式进行。如果一个字符串的左边和另一个字符串的左边是scramble,右边和右边是scramble。或者是,左右,右左是scramble字符串的话。那么这两个字符串就是scramble字符串。可以通过剪枝加快判断,首先判断两个字符串是否包含同样的字符,两个字符串中包含的字符不一样,就可以直接返回。虽然这里用了O(n)的时间,但是能剪去很多分支,是值得的。
code
algorithm analysis
每个函数正常情况下都能分出4个分支,每个分支中时间复杂度是线性的。最后时间复杂度不好定义。但是整个运行时间复杂度还是挺高的
Last updated