当前位置: 首页 > news >正文

leetcode做题笔记87扰乱字符串

使用下面描述的算法可以扰乱字符串 s 得到字符串 t :

  1. 如果字符串的长度为 1 ,算法停止
  2. 如果字符串的长度 > 1 ,执行下述步骤:
    • 在一个随机下标处将字符串分割成两个非空的子字符串。即,如果已知字符串 s ,则可以将其分成两个子字符串 x 和 y ,且满足 s = x + y 。
    • 随机 决定是要「交换两个子字符串」还是要「保持这两个子字符串的顺序不变」。即,在执行这一步骤之后,s 可能是 s = x + y 或者 s = y + x 。
    • 在 x 和 y 这两个子字符串上继续从步骤 1 开始递归执行此算法。

给你两个 长度相等 的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。如果是,返回 true ;否则,返回 false 。

思路一:模拟题意

bool check(char *s1,char *s2,int len)
{char ss1[26]={0};char ss2[26]={0};char i=0;for (i=0;i<len;i++){ss1[s1[i]-'a']++;ss2[s2[i]-'a']++;}for(i=0;i<26;i++){if(ss1[i]!=ss2[i]) return false;}return true;
}
char mem[30][30][31];
bool complie(char *s1,char *s2,int len,int s1begin,int s2begin)
{if(mem[s1begin][s2begin][len]==1) return true;if(mem[s1begin][s2begin][len]==2) return false;if(len==0) return true;if(len==1) {mem[s1begin][s2begin][len]=1;return *s1==*s2;}if(!check(s1,s2,len)) {mem[s1begin][s2begin][len]=2;return false;}int i=0;for(i=1;i<len;i++){if(complie(s1,s2,i,s1begin,s2begin) && complie(s1+i,s2+i,len-i,s1begin+i,s2begin+i)) {mem[s1begin][s2begin][len]=1;return true;}if(complie(s1,s2+len-i,i,s1begin,s2begin+len-i) && complie(s1+i,s2,len-i,s1begin+i,s2begin)) {mem[s1begin][s2begin][len]=1;return true;}}mem[s1begin][s2begin][len]=2;return false;
}
bool isScramble(char * s1, char * s2){int len1=0;int len2=0;memset(mem,0,sizeof(mem));while(s1[len1]!=0){len1++;}while(s2[len2]!=0){len2++;}if(len1!=len2) return false;return complie(s1,s2,len1,0,0);
}

分析:

本题扰乱字符串满足交换两个子字符串或保持这两个子字符串的顺序不变,转换为complie(s1,s2,i,s1begin,s2begin) && complie(s1+i,s2+i,len-i,s1begin+i,s2begin+i)和complie(s1,s2+len-i,i,s1begin,s2begin+len-i) && complie(s1+i,s2,len-i,s1begin+i,s2begin),通过complie函数递归找到答案,同时两个字符串长度首先要相等,先判断两个字符串长度是否相等再进行递归返回答案

总结:

本题考察递归的应用,利用递归交换两个子字符串或保持这两个子字符串的顺序不变判断是否为扰乱字符串

http://www.lryc.cn/news/136015.html

相关文章:

  • 第一章 初识Linux(含VMware安装Ubuntu、CentOS、Windows、FinalShell、快照)
  • MATLAB算法实战应用案例精讲-【图像处理】OCR识别方法-CRNN
  • 无涯教程-PHP - preg_grep()函数
  • 【Linux】Nginx解决跨域问题
  • 无涯教程-PHP - preg_split()函数
  • B. Spreadsheets
  • matlab面向对象
  • 01、Cannot resolve MVC View ‘xxxxx前端页面‘
  • 时空智友企业流程化管控系统文件上传漏洞复现
  • 【已解决】Authenticator:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知
  • 聊聊springboot tomcat的maxHttpFormPostSize
  • java并发:synchronized锁详解
  • Unity 之NavMeshAgent 组件(导航和路径寻找的组件)
  • 装箱和拆箱
  • 等保测评--安全通信网络--测评方法
  • 统计学补充概念11-tsne
  • Linux_11_系统启动和内核管理
  • 【从零学习python 】65. Python正则表达式修饰符及其应用详解
  • QA2
  • centos7卸载docker
  • 【计算机视觉】递归神经网络在图像超分的应用Deep Recursive Residual Network for Image Super Resolution
  • Centos 7 安装系列(8):openGauss 3.0.0
  • NOIP真题讲解 传球游戏 接水问题
  • 《论文阅读18》 SSD: Single Shot MultiBox Detector
  • NOIP2016普及组第四题 魔法阵
  • uniapp-滑块验证组件wo-slider
  • NPM 管理组织成员
  • 设计模式(3)抽象工厂模式
  • 【C++】早绑定、析构与多态 | 一道关于多态的选择题记录
  • mac下安装tomcat