关闭

攀爬字符串

标签: 攀爬字符串lintpython
589人阅读 评论(0) 收藏 举报
分类:

问题

给定一个字符串 S1,将其递归地分割成两个非空子字符串,从而将其表示为二叉树。

下面是s1 = “great”的一个可能表达:

    great
   /    \
  gr    eat
 / \    /  \
g   r  e   at
           / \
          a   t

在攀爬字符串的过程中,我们可以选择其中任意一个非叶节点,然后交换该节点的两个儿子。

例如,我们选择了 “gr” 节点,并将该节点的两个儿子进行交换,从而产生了攀爬字符串 “rgeat”。

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

我们认为, “rgeat” 是 “great” 的一个攀爬字符串.

类似地,如果我们继续将其节点 “eat” 和 “at” 进行交换,就会产生新的攀爬字符串 “rgtae”。

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

同样地,”rgtae” 也是 “great”的一个攀爬字符串。

给定两个相同长度的字符串s1 和 s2,判定 s2 是否为 s1 的攀爬字符串。

思路

对于原字符串great 对第一次 拆分可能有如下几种情况:
1. great
2. great
3. great
4. great
对于 字符串 s2 如果他是great的攀爬字符串 有两种状况:第一种 是与s1相同分割状态 并且,对应分割的子串 也是攀爬字符串,第二种 与 s1 相反分割状态,对应分割的子串 为 攀爬字符串。

实现

class Solution:
    # @param {string} s1 A string
    # @param {string} s2 Another string
    # @return {boolean} whether s2 is a scrambled string of s1
    def isScramble(self, s1, s2):
        # Write your code here
        l = len(s1)
        if l == 1:
            return s1 == s2
        if l == 2:
            if s1 == s2:
                return True
            if s1[0] == s2[1] and s1[1] == s2[0]:
                return True
            return False
        for i in range(1,l):
            left1 = s1[0:i]
            left2 = s2[0:i]
            right1 = s1[i:]
            right2 = s2[i:]
            left2r = s2[:l-i]
            right2r = s2[l-i:]
            if (self.isScramble(left1,right2r) and self.isScramble(right1,left2r)) or (self.isScramble(left1,left2) and self.isScramble(right1,right2)):
                return True

        return False 
0
0
查看评论

Arithmetic problem | 判定字符串是否为攀爬字符串

题目如下: 给定一个字符串 S1,将其递归地分割成两个非空子字符串,从而将其表示为二叉树。 下面是s1 = "great"的一个可能表达: great / \ gr eat / \ / \ g r e ...
  • sweeterer
  • sweeterer
  • 2016-08-09 15:12
  • 9717

lintcode(430)攀爬字符串

Description: 给定一个字符串 S1,将其递归地分割成两个非空子字符串,从而将其表示为二叉树。 下面是s1 = "great"的一个可能表达: great / \ gr eat / \ / \ g ...
  • sunday0904
  • sunday0904
  • 2017-06-09 10:58
  • 314

攀爬字符串

给定一个字符串 S1,将其递归地分割成两个非空子字符串,从而将其表示为二叉树。 下面是s1 = "great"的一个可能表达: great / \ gr eat / \ / \ g r e at ...
  • brucehb
  • brucehb
  • 2015-10-03 21:37
  • 548

攀爬字符串

问题给定一个字符串 S1,将其递归地分割成两个非空子字符串,从而将其表示为二叉树。下面是s1 = “great”的一个可能表达: great / \ gr eat / \ / \ g r e at / \ a ...
  • u014731991
  • u014731991
  • 2016-05-30 13:50
  • 589

Unity3D游戏开发之MatchTarget实现角色攀爬效果

MatchTarger即匹配目标,是Animator类中的一个方法,该方法可以实现在执行动画的过程中使角色身体的某个部位与指定位置进行匹配,比如我们在攀爬的过程中,手、脚及身体应该是和墙壁接触的,那么这时我们就可以考虑使用这个方法
  • qq_27361571
  • qq_27361571
  • 2016-11-23 16:51
  • 455

[Unity3D]Unity3D游戏开发之MatchTarget实现角色攀爬效果

大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。今天我们来一起学习在Unity3D中如何实现角色攀爬效果。在RPG游戏中,某些游戏场景常常需要玩家沿着墙壁或者梯子攀爬到高处,例如《仙剑奇侠传三》的九龙坡场景中,玩家需要沿着梯子爬到高处才能收集...
  • qinyuanpei
  • qinyuanpei
  • 2014-07-29 18:33
  • 9320

lintcode(412)分糖果

Description: 有 N 个小孩站成一列。每个小孩有一个评级。 按照以下要求,给小孩分糖果: 每个小孩至少得到一颗糖果。  评级越高的小孩可以得到更多的糖果。 需最少准备多少糖果? Explanation: ...
  • sunday0904
  • sunday0904
  • 2017-06-10 08:42
  • 212

简单几步教你制作植物攀爬到建筑上

photoshop英文教程来自于:http://psd.tutsplus.com/articles/news/create-classic-ivy-running-up-a-building-psd-plus-tutorial/ Author: Tomasz Opasinski 前言:如果你想自己P...
  • haibo0668
  • haibo0668
  • 2016-06-02 13:01
  • 940
    个人资料
    • 访问:28960次
    • 积分:245
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:0篇
    • 译文:0篇
    • 评论:15条
    文章分类
    最新评论