87. Scramble String

问题描述

Given two strings s1 and s2 of the same length, determine if s2 is a scrambled string of s1.
问题描述详见LeetCode页面

问题分析

将s1切割成两部分,将s2也切割成相同长度的两部分(有两种切割方法),判断s2的子串是否为s1的scrambled string,递归解题。
hint:在递归前先判断一下两个字符串的组成字母是否一致,不一致直接返回False。

AC代码

class Solution(object):
    def isScramble(self, s1, s2):
        """
        :type s1: str
        :type s2: str
        :rtype: bool
        """
        if len(s1) != len(s2):
            return False
        n = len(s1)
        if n == 1:
            return s1 == s2
        dic1 = {}
        for c in s1:
            if dic1.has_key(c):
                dic1[c] += 1
            else:
                dic1[c] = 1
        for c in s2:
            if not dic1.has_key(c) or dic1[c] == 0:
                return False
            dic1[c] -= 1
        for i in range(1, n):
            if self.isScramble(s1[:i], s2[:i]) and self.isScramble(s1[i:], s2[i:]) or self.isScramble(s1[:i], s2[n-i:]) and self.isScramble(s1[i:], s2[:n-i]):
                return True
        return False

Runtime: 56 ms, which beats 100.00% of Python submissions. (有偶然性但是我不想再交啦23333)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容