Scramble String (Java)

来源:互联网 发布:java写网络扫描器 编辑:程序博客网 时间:2024/06/03 22:30

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.

注意每次交换仅限于两个分支之间。

下次写注意动态规划方法。

Source

    public boolean isScramble(String s1, String s2) {        if(s1.length() != s2.length())        return false;        if(s1.length() == 1 && s2.length() == 1){        if(s1.charAt(0) == s2.charAt(0))        return true;        else return false;        }                char[] a1 = s1.toCharArray(), a2 = s2.toCharArray();        Arrays.sort(a1);        Arrays.sort(a2);        if(!new String(a1).equals(new String(a2)))        return false;                for(int i = 1; i < s1.length(); i++){        String b1 = s1.substring(0, i);        String b2 = s1.substring(i);        String c1 = s2.substring(0, i);        String c2 = s2.substring(i);                if(isScramble(b1, c1) && isScramble(b2, c2))        return true;        c1 = s2.substring(0, s2.length() - i);        c2 = s2.substring(s2.length() - i);        if(isScramble(b1, c2) && isScramble(b2, c1))        return true;        }        return false;    }


Test

    public static void main(String[] args){    String s1 = "great", s2 = "rgtae";    System.out.println(new Solution().isScramble(s1, s2));    }


0 0