087 Scramble String

Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.

Example:

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

解释下题目:

给定一个单词,可以把这个单词在任意的地方一分为二,然后构成两颗子树,然后对子树继续如此操作,就可以得到一棵树。选择这棵树的任意一个非叶子节点,交换这个节点的两个子树,最后会得到一个新的单词,这个单词就叫原单词的Scramble String,然后可以继续这么操作下去得到一个单词的所有Scramble String。

1. 递归

实际耗时:2ms

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;
    }

  一开始拿到这道题的时候,我一开始想的是按照题目的意思,对一个单词构造二叉树,然后进行交换操作,老老实实得到一个单词的所有解。但是后来发现复杂度太高。最后没办法去网上找了上面的解。它的思路其实很简单,就是如果s1和s2如果是Scramble String,那么将它们在相同的地方一分为二,必须满足以下的两个条件之一:

  1. s1的前半部分和s2的前半部分必须出现的单词频率一致且它们的后半部分的单词出现频率也一致
  2. s1的前半部分和s2的后半部分必须出现的单词频率一致且s1的后半部分和s2的前半部分的单词出现频率一致
    数学证明.....这题如果这么做其实就没意思了。

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

相关阅读更多精彩内容

  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 7,095评论 5 24
  • 1. file n. 文件;v. 保存文件2. command n. 命令指令3. use v. 使用用途4. p...
    喵呜Yuri阅读 818评论 0 4
  • 上午通知加班,心态很稳定,现在对于突然来的安排或者变动都可以很坦然的接受,然后冷静的调整自己的安排就好了。 这次公...
    作家阿紫阅读 384评论 0 0
  • 坚持反思总结 已经有好长时间没来进行反思总结,不知不觉在简书写了快四个月,现在写得更多的是小故事,会不会有一天也成...
    小月半脚阅读 509评论 4 5
  • 夏天的饭局是我最寂寞的时候,每到夏天大家都痴迷于小龙虾,而我不吃,每当组饭局而我说不吃小龙虾时我总有种脱离尘...
    沙沙香沙芋阅读 279评论 0 1

友情链接更多精彩内容