首页 > 其他分享 >leetcode87-扰乱字符串

leetcode87-扰乱字符串

时间:2022-08-17 12:13:51浏览次数:101  
标签:扰乱 leetcode87 s2 s1 i2 len i1 字符串 dp

扰乱字符串

  • dp

dp需要记录s1和s2的起始位置和长度,所以是一个三维dp。
dp[i1][i2][len]表示s1从i1位置开始,s2从i2位置开始,长度为len的两个字符串是否和谐。分为以下几种情况:

  1. 如果两个字符串相等,返回true
  2. 如果字符串不相等,那么从1到len-1的范围内,找出分割点i。如果dp[i1][i2][i] && dp[i1+i][i2+i][len-i]成立或者dp[i1][i2+len-i][i] && dp[i1+len-i][i2][len-i]成立,那么表明这两个字符经过分割之后可以重新拼凑,则返回true
  3. 除此之外,两个字符无法拼凑,返回false

这里的dp初始值为0,表示未被更改。如果dp值为1表示true,dp值为-1表示false

class Solution {
    int dp[][][];
    String s1 = null, s2 = null;
    public boolean isScramble(String s1, String s2) {
        int n = s1.length();
        if(s2.length() != n)    return false;
        dp = new int[n][n][n+1];
        this.s1 = s1;
        this.s2 = s2;
        return dfs(0, 0, n);
    }
    public boolean dfs(int i1, int i2, int len){
        if(dp[i1][i2][len] != 0)    return dp[i1][i2][len] == 1;
        if(s1.substring(i1, i1+len).equals(s2.substring(i2, i2+len))){
            dp[i1][i2][len] = 1;
            return true;
        }
        for(int i = 1; i < len; i++){
            if(dfs(i1, i2, i) && dfs(i1+i, i2+i, len-i) || dfs(i1, i2+len-i, i) && dfs(i1+i, i2, len-i)){
                dp[i1][i2][len] = 1;
                return true;
            }
        }
        dp[i1][i2][len] = -1;
        return false;
    }
}

标签:扰乱,leetcode87,s2,s1,i2,len,i1,字符串,dp
From: https://www.cnblogs.com/xzh-yyds/p/16594648.html

相关文章

  • mybatis判断字符串等于
    前言:我们通常使用mybatis过程中,对于判断一个变量是否为空的时候,使用<iftest="xxx!=nullandxxx!=''">进行。有个小坑如下:<iftest="name!=null&&name=='admi......
  • 使用Jquery的ajaxprefilter来拼接url字符串
    目的:我们每次发请求,如果都需要拼接字符串的话,会特别浪费时间,以及不利于后期维护例如如下代码:$('#form_login').on('submit',function(e){e.preventDefault(......
  • 字符串添加颜色
    想给字符串一些颜色进行展示lis=[31,32,33,34,35,36]msg='''断了的弦再怎么连,我的感觉你已听不见你的转变像断掉的弦,再怎么接音都不对你的改变我能够分......
  • kmp字符串
    给定一个字符串S,以及一个模式串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串P在字符串S中多次作为子串出现。求出模式串P在字符串S中所有出现的......
  • 整数型转字符串
    1.itoa();参考:C语言整数与字符串的相互转换|菜鸟教程(runoob.com) C语言itoa()函数和atoi()函数详解(整数转字符C实现)_p312011150的博客-CSDN博客_itoa头文件:<s......
  • 1047.remove-all-adjacent-duplicates-in-string 删除字符串中所有相邻重复项
    利用stack(栈)这一数据结构,当前字符与栈顶字符相等时,pop(),最后把栈中的字符还原成字符串,注意栈是LIFO的,因此还原字符串时要注意顺序。#include<stack>#include<string>......
  • python 中 如何提取或者删除列表的最后几个元素(适用于元组、字符串序列)
     001、>>>test=["a","b","c","d","e","f","g","h","i","j"]##测试列表>>>test['a','b','c'......
  • 笔记:字符串相关
    字符串常用操作:1、字符串变量.ToUpper();//将小写字母变为大写2、字符串变量.ToLower();//将大写字母变小写3、字符串变量1.Equals(字符串变量2);//判断字符串变量1和变量2......
  • 查找所有匹配的字符串
    可以通过循环调用indexOf()来查找所有匹配的字符串,如下面的例子:varstringValue="Helloword!";varposition=newArray();varpos=stringValue.indexOf("o")whi......
  • Blob转字符串(Blob to string)
    方法1://data:指待读取blob数据letreader=newFileReader();reader.onload=event=>{//读取之后进行操作的代码区域,event.currentTarget.re......