美文网首页
87. Scramble String

87. Scramble String

作者: HalcyonMoon | 来源:发表于2016-06-29 11:57 被阅读0次

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 t

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"

rgeat 
  / \\ 
rg eat 
/ \\ / \\
r g e at 
      / \\ 
      a t

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".

  rgtae 
    / \\ 
  rg tae 
  / \\ / \\
  r g ta e 
      / \\
       t a

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.

public class Solution {
    
    public boolean isScramble(char [] s1, int start1, int end1, char[] s2, int start2, int end2){
        if(end1-start1 != end2-start2)
            return false;
        
        boolean needPassdown = false;
        int sum1=0, sum2=0;
        for(int i = 0; start1+i<=end1; i++){
            if(s1[start1 + i] != s2[start2 + i]){
                needPassdown = true;
            }
            sum1 ^= s1[start1 + i];
            sum2 ^= s2[start2 + i];
        }
        if(!needPassdown){
            return true;
        }
        if(sum1!=sum2){
            return false;
        }
        
        for(int i = 0; i<end1-start1; i++){
            if(isScramble(s1, start1, start1+i, s2, start2, start2+i) && isScramble(s1, start1+i+1, end1, s2, start2+i+1, end2))
                return true;
            if(isScramble(s1, start1, start1+i, s2, end2-i, end2) && isScramble(s1, start1+i+1, end1, s2, start2, end2-i-1))
                return true;
        }
        return false;
    }
    
    public boolean isScramble(String s1, String s2) {
        if(s1 == null || s2 == null)
            return false;
        
        char [] sc1 = s1.toCharArray();
        char [] sc2 = s2.toCharArray();
        
        return isScramble(sc1, 0, sc1.length-1, sc2, 0, sc2.length-1);
    }
}

相关文章

  • 10.3 - hard总结2

    87. Scramble String: 区间dp加上memory search97. Interleaving ...

  • 87. Scramble String

    具体链接戳这千万不要以为它是均等分!!!!!!解题思路: 如果两个字符串的各个字符数量都不相等,直接返回false...

  • 87. Scramble String

    Given a string s1, we may represent it as a binary tree b...

  • 87. Scramble String

    问题描述 Given two strings s1 and s2 of the same length, dete...

  • 2020-2-27 刷题记录

    今天,又只做了三道..... 0X00 leetcode 做了 3 道 leetcode 87. Scramble...

  • Scramble String

    题目Given a string s1, we may represent it as a binary tree...

  • 087 Scramble String

    Given a string s1, we may represent it as a binary tree b...

  • 87.Scramble String

    https://leetcode.com/problems/scramble-string/ 题意不是简单的rev...

  • Scramble String(未完待续)

    题目链接 题意 见题目链接 解答 因为二叉树是由字符串递归地分割生成的,所以能很自然地想到递归的解法。遍历 s1 ...

  • [LeetCode 87] Scramble String (H

    Given a string s1, we may represent it as a binary tree b...

网友评论

      本文标题:87. Scramble String

      本文链接:https://www.haomeiwen.com/subject/wkxxjttx.html