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

力扣第87题-扰乱字符串

力扣链接:87. 扰乱字符串 - 力扣(LeetCode)

思路:
从一个位置将两个字符串分别划分成两个子串,然后递归判断两个字符串的两个子串是否互相为扰乱字符串。因为不知道在哪个位置分割字符串,所以直接遍历每个位置进行分割。在判断是否两个子串能否通过翻转变成相等的时候,需要保证传给函数的子串长度是相同的。
我们分两种情况讨论:互换和不互换
终止条件就是,当长度是1的两个字符串是否相等
记忆化递归用到python的缓存库,将已经计算过的结果保存到缓存中,再计算时在缓存中,不用再次计算
import functools
@functools.lru_cache(None)

import functools@functools.lru_cache(None)
def isScramble(s1: str, s2: str):N = len(s1)if N == 0:return Trueif N == 1:return s1 == s2     # 最终的递归出口if sorted(s1) != sorted(s2):return Falsefor i in range(1, N):if isScramble(s1[:i], s2[:i]) and isScramble(s1[i:], s2[i:]):return Trueelif isScramble(s1[:i], s2[-i:]) and isScramble(s1[i:], s2[:-i]):return Truereturn Falseprint(isScramble("great", "rgeat"))

相关文章:

  • 支持向量机(SVM)在医疗诊断:医学影像领域的应用与实现
  • 现代 JavaScript (ES6+) 入门到实战(八):总结与展望 - 成为一名现代前端开发者
  • 现代 JavaScript (ES6+) 入门到实战(五):告别回调地狱,Promise 完全入门
  • PCB工艺学习与总结-20250628
  • Ubuntu20 编译安装 Redis7.2.4
  • MySQL 安装使用教程
  • Ubuntu22 安装 RTX 5070 Ti Nvidia Driver 驱动
  • NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)
  • docker启动xxl-job 网络问题
  • 解锁Ubuntu安装:从新手到高手的通关秘籍
  • 在Mac上查找并删除Java 21.0.5
  • 阶乘求和全解析:从 Python 秒过到 C++ 手写高精度
  • 【Redis#4】Redis 数据结构 -- String类型
  • 【如何实现分布式压测中间件】
  • 什么是区块哈希(Block Hash)
  • 图片元数据与防篡改技术指南
  • 编写c++程序分别在x86和arm架构的ubuntu下访问CAN 接口设备
  • 80%的知识库场景选择FastGPT,20%的复杂场景选择Dify
  • 设计的“第一性原理”:从Photoshop与Premiere Pro的AI革新谈起
  • 具身智能系列教程——(三)gazebo环境配置与强化学习训练