zoukankan      html  css  js  c++  java
  • 87. Scramble String(js)

    87. Scramble String

    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.

    Example 1:

    Input: s1 = "great", s2 = "rgeat"
    Output: true
    

    Example 2:

    Input: s1 = "abcde", s2 = "caebd"
    Output: false
    题意:给定两个字符串,判断这两个字符串是否互为scramble,scramble的定义是将字符串按照二叉树的形式逐级进行字符拆分,直到不能再拆为止,如果两个字符串互为scramble,
    那么交换两个叶子节点可以将两个字符串相互转换
    代码如下:
    /**
     * @param {string} s1
     * @param {string} s2
     * @return {boolean}
     */
    var isScramble = function(s1, s2) {
          if(s1.length!=s2.length)    return false;
            if(s1==s2) return true;
            let str1=s1,str2=s2;
            str1=str1.split('').sort().join('')
            str2=str2.split('').sort().join('')
            if(str1!=str2) return false;
            
            for(let i=1;i<s1.length;i++){
                let s11=s1.substr(0,i);
                let s12=s1.substr(i);
                let s21=s2.substr(0,i);
                let s22=s2.substr(i);
                if(isScramble(s11,s21) && isScramble(s12,s22)) return true;
                s21=s2.substr(s1.length-i);
                s22=s2.substr(0,s1.length-i);
                if(isScramble(s11,s21) && isScramble(s12,s22)) return true;
            }
            return false;
    };
  • 相关阅读:
    课后作业 day19
    day 18
    博客整理day17 time/datetime/re/random/hashlib/hmac/requests
    博客整理day16 os/sys/json/pickle/logging模块
    博客整理day15 模块
    课后作业 day14
    博客整理day14 匿名函数/内置函数/异常处理/面对象
    博客整理day13
    [Day20]Map接口、可变参数、Collections
    [Day19]Collection接口中的子类(List集合、Set集合)
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/10667217.html
Copyright © 2011-2022 走看看