Scramble String

原题: https://leetcode.com/problems/scramble-string/description/
题意: 判断两个字符串是否能通过二叉树的左右子树交换相等。
约定:(1)两个字符串的长度相等。
例子: 
    great
   /    \
  gr    eat
 / \    /  \
g   r  e   at
           / \
          a   t
    rgeat
   /    \
  rg    eat
 / \    /  \
r   g  e   at
           / \
          a   t
    rgtae
   /    \
  rg    tae
 / \    /  \
r   g  ta  e
       / \
      t   a
返回:true
标签: scramble、rg、eat、rgeat、rgtae、面试
猜你感兴趣的圈子:
LeetCode交流圈
  • Bingo
    2017-08-11 13:05:46 1楼#1层
    C++:
    class Solution {
    public:
        bool isScramble(string s1, string s2) {
            if(s1==s2)
                return true;
                
            int len = s1.length();
            int count[26] = {0};
            for(int i=0; i<len; i++)
            {
                count[s1[i]-'a']++;
                count[s2[i]-'a']--;
            }
            
            for(int i=0; i<26; i++)
            {
                if(count[i]!=0)
                    return false;
            }
            
            for(int i=1; i<=len-1; i++)
            {
                if( isScramble(s1.substr(0,i), s2.substr(0,i)) && isScramble(s1.substr(i), s2.substr(i)))
                    return true;
                if( isScramble(s1.substr(0,i), s2.substr(len-i)) && isScramble(s1.substr(i), s2.substr(0,len-i)))
                    return true;
            }
            return false;
        }
    };
  • Bingo
    2017-08-11 13:06:09 2楼#1层
    Java:
    public class Solution {
        public boolean isScramble(String s1, String s2) {
            if (s1.equals(s2)) return true; 
            
            int[] letters = new int[26];
            for (int i=0; i<s1.length(); i++) {
                letters[s1.charAt(i)-'a']++;
                letters[s2.charAt(i)-'a']--;
            }
            for (int i=0; i<26; i++) if (letters[i]!=0) return false;
        
            for (int i=1; i<s1.length(); i++) {
                if (isScramble(s1.substring(0,i), s2.substring(0,i)) 
                 && isScramble(s1.substring(i), s2.substring(i))) return true;
                if (isScramble(s1.substring(0,i), s2.substring(s2.length()-i)) 
                 && isScramble(s1.substring(i), s2.substring(0,s2.length()-i))) return true;
            }
            return false;
        }
    }
  • 回复
隐藏