IT技術(shù)小屋

          秋風秋雨,皆入我心

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            38 隨筆 :: 1 文章 :: 19 評論 :: 0 Trackbacks
          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.

           1 public class ScrambleString {
           2     public boolean isScramble(String s1, String s2) {
           3         if (s1.length() != s2.length())
           4             return false;
           5         if (s1.equals(s2))
           6             return true;
           7 
           8         int[] A = new int[26];
           9         for (int i = 0; i < s1.length(); i++) {
          10             ++A[s1.charAt(i) - 'a'];
          11         }
          12 
          13         for (int j = 0; j < s2.length(); j++) {
          14             --A[s2.charAt(j) - 'a'];
          15         }
          16 
          17         for (int k = 0; k < 26; k++) {
          18             if (A[k] != 0)
          19                 return false;
          20         }
          21 
          22         for (int i = 1; i < s1.length(); i++) {
          23             boolean result = isScramble(s1.substring(0, i), s2.substring(0, i))
          24                     && isScramble(s1.substring(i), s2.substring(i));
          25             result = result
          26                     || (isScramble(s1.substring(0, i),
          27                             s2.substring(s2.length() - i, s2.length())) && isScramble(
          28                             s1.substring(i), s2.substring(0, s2.length() - i)));
          29             if (result)
          30                 return true;
          31         }
          32         return false;
          33     }
          34 }
          posted on 2014-01-05 12:33 Meng Lee 閱讀(222) 評論(0)  編輯  收藏 所屬分類: Leetcode
          主站蜘蛛池模板: 华安县| 惠来县| 康马县| 尉氏县| 大荔县| 苍溪县| 三门县| 竹北市| 诸城市| 赤水市| 法库县| 富顺县| 密云县| 宁海县| 保靖县| 曲靖市| 西畴县| 满城县| 汽车| 沙田区| 鄂温| 六盘水市| 平远县| 读书| 静宁县| 左贡县| 马山县| 江阴市| 邢台市| 东源县| 崇礼县| 新田县| 景谷| 上高县| 绥江县| 青龙| 蓬莱市| 涪陵区| 同德县| 南开区| 永修县|