zoukankan      html  css  js  c++  java
  • leetcode 87 Scramble String

    lc 87 Scramble String

    我们需要检查所有cut字符串的位置

    即s1(0, 1, 2, ..., n-1), s2(0, 1, 2, ..., n-1)

    设cut点为i,将字符串分为(0~i-1),(i~n-1)

    1=<i<=n-1( i=0的情况直接用equals(),判断s1s2是否相等即可)

    需要注意的是,有两种可能性

    a) s1(0~i-1)配s2(0~i-1),s1(i~n-1)配s2(i~n-1)

    b) s1(0~i-1)配s2(n-i, n-1), s1(i~n-1)配s2(0~n-i-1)

    除此之外,需要检查配对字符串是否为anagram,同字母异序串,例如aabababs,saaaabbb

    可以用int[26]检查字母出现次数

    不同就返回false

    然后利用递归式,分别检查这两种情况,但凡a)或b)中两个配对式都返回true,说明是scramble String

     1 class Solution {
     2     public boolean isScramble(String s1, String s2) {
     3         if(s1.equals(s2))
     4             return true;
     5         int[] abc = new int[26];
     6         for(int i=0; i<s1.length(); i++){
     7             abc[s1.charAt(i)-'a']++;
     8             abc[s2.charAt(i)-'a']--;
     9         }
    10         
    11         for(int i : abc)
    12             if(i != 0)
    13                 return false;
    14         
    15         for(int i=1; i<s1.length(); i++){
    16             if(isScramble(s1.substring(0, i), s2.substring(0, i)) && isScramble(s1.substring(i), s2.substring(i)))
    17                 return true;
    18             if(isScramble(s1.substring(0, i), s2.substring(s2.length() - i)) && isScramble(s1.substring(i), s2.substring(0, s2.length()-i)))
    19                 return true;
    20         }
    21         return false;
    22     }
    23 }
  • 相关阅读:
    linux 开机启动设置
    Ubuntu安装Oracle时出现乱码,及其他安装错误
    ubuntu 设置DNS
    opencv cuda TK1 TX1 兼容设置
    int to string
    post文件的html
    vc 获得调用者的模块名称
    dlib landmark+人面识别
    android破解
    jquery $(document).ready() 与window.onload的区别
  • 原文地址:https://www.cnblogs.com/hwd9654/p/10958953.html
Copyright © 2011-2022 走看看