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":
great
/ \
gr eat
/ \ / \
g r e at
/ \
a tTo 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".
rgeat
/ \
rg eat
/ \ / \
r g e at
/ \
a tWe 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