首页 > 其他分享 >【动态规划】【字符串】扰乱字符串

【动态规划】【字符串】扰乱字符串

时间:2024-01-08 16:34:12浏览次数:26  
标签:扰乱 int s2 s1 len vector 字符串 动态


作者推荐

视频算法专题

涉及知识点

动态规划 字符串

LeetCode87扰乱字符串

使用下面描述的算法可以扰乱字符串 s 得到字符串 t :
如果字符串的长度为 1 ,算法停止
如果字符串的长度 > 1 ,执行下述步骤:
在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,则可以将其分成两个子字符串 x 和 y ,且满足 s = x + y 。
随机 决定是要「交换两个子字符串」还是要「保持这两个子字符串的顺序不变」。即,在执行这一步骤之后,s 可能是 s = x + y 或者 s = y + x 。
在 x 和 y 这两个子字符串上继续从步骤 1 开始递归执行此算法。
给你两个 长度相等 的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。如果是,返回 true ;否则,返回 false 。
示例 1:
输入:s1 = “great”, s2 = “rgeat”
输出:true
解释:s1 上可能发生的一种情形是:
“great” --> “gr/eat” // 在一个随机下标处分割得到两个子字符串
“gr/eat” --> “gr/eat” // 随机决定:「保持这两个子字符串的顺序不变」
“gr/eat” --> “g/r / e/at” // 在子字符串上递归执行此算法。两个子字符串分别在随机下标处进行一轮分割
“g/r / e/at” --> “r/g / e/at” // 随机决定:第一组「交换两个子字符串」,第二组「保持这两个子字符串的顺序不变」
“r/g / e/at” --> “r/g / e/ a/t” // 继续递归执行此算法,将 “at” 分割得到 “a/t”
“r/g / e/ a/t” --> “r/g / e/ a/t” // 随机决定:「保持这两个子字符串的顺序不变」
算法终止,结果字符串和 s2 相同,都是 “rgeat”
这是一种能够扰乱 s1 得到 s2 的情形,可以认为 s2 是 s1 的扰乱字符串,返回 true
示例 2:
输入:s1 = “abcde”, s2 = “caebd”
输出:false
示例 3:
输入:s1 = “a”, s2 = “a”
输出:true
参数
s1.length == s2.length
1 <= s1.length <= 30
s1 和 s2 由小写英文字母组成

动态规划

时间复杂度

标签:扰乱,int,s2,s1,len,vector,字符串,动态
From: https://blog.51cto.com/u_15724537/9146770

相关文章

  • 【动态规划】【字符串】C++算法:正则表达式匹配
    作者推荐视频算法专题涉及知识点动态规划字符串LeetCode10:正则表达式匹配给你一个字符串s和一个字符规律p,请你来实现一个支持‘.’和‘’的正则表达式匹配。‘.’匹配任意单个字符'’匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符......
  • 【错误记录】C++ 字符串常量参数报错 ( 无法将参数 1 从“const char [4]”转换为“ch
    文章目录一、报错信息二、问题分析三、解决方案1、设置VisualStudio的兼容规则2、修改实参类型①3、修改实参类型②4、修改实参类型③5、修改形参类型一、报错信息定义了一个函数,接收char*类型的字符串参数;//接收字符串参数并打印voidfun(char*str){ cout<......
  • 字符串和哈希表的基本用法总结
    2287.重排字符形成目标字符串解决代码classSolution{publicintrearrangeCharacters(Strings,Stringtarget){Map<Character,Integer>sCounts=newHashMap<Character,Integer>();Map<Character,Integer>targetCounts=newHashMap&......
  • 社交网络的动态分析:如何捕捉网络的演变
    1.背景介绍社交网络是现代互联网时代的一个重要产物,它们为人们提供了一种快速、实时地与他人交流、分享信息和建立社交关系的方式。社交网络的动态分析是研究社交网络中用户行为、信息传播、社交关系发展等方面的一种方法,它可以帮助我们更好地理解社交网络的特点、规律和潜在风险。......
  • 推荐系统的强化学习与动态环境:如何适应用户行为变化
    1.背景介绍推荐系统是现代互联网企业的核心业务之一,它通过分析用户行为、内容特征等信息,为用户推荐个性化的内容或产品。随着用户行为的复杂化和变化,传统的推荐系统基于静态模型已经不能满足需求。因此,研究推荐系统的强化学习与动态环境变得尤为重要。在这篇文章中,我们将从以下几个......
  • Trie字符串统计题解
    维护一个字符串集合,支持两种操作:"Ix"向集合中插入一个字符串x;"Q×"询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为"l×"或"Q×"中的一种。......
  • java后台字符串URLencode、URLdecode及Base64加解密转换
    一、URLencode、URLdecode//将application/x-www-from-urlencoded字符串转换成普通字符串StringkeyWord=URLDecoder.decode("%E4%BD%A0%E5%A5%BD","utf-8");System.out.println(keyWord);//输出你好//将普通字符创转换成application/x-www......
  • Qt生成动态库和使用动态库
    一、动态库的生成第一步.新建项目——库——C++Library——点击选择按钮第二步.填写名称——新建路径——点击下一步按钮第三步:选择Buildsystem:默认的qmake即可——点击下一步按钮第四步:设置库的类型默认的SharedLibrary即可——设置Qt module选择需要的模块——其他也设置为......
  • 动态内存开辟--在堆区进行开辟存储
    1.malloc值//1.malloc--开辟好的空间如果还没有使用,则都默认为随机值#include<stdlib.h>#include<string.h>#include<errno.h>#include<stdio.h>intmain(){ //向堆区内存申请开辟是个整型内存的空间,开辟的空间首地址交给指针p //int*p=(int*)malloc(10*sizeof(int)); ......
  • 常见的动态内存开辟错误
    1.没有判断malloc返回值是否开辟成功,对NULL解引用操作intmain(){ int*p=(int*)malloc(40);//没有判断malloc开辟失败情况 //万一malloc失败,p就被赋值为NULL for(inti=0;i<10;i++) { *(p+i)=i; } free(p); p=NULL; return0;}2.对动态开辟内存的越界......