用DFS, DFS+memo,BFS解答Leetcode 854 K-Similar Strings

这篇博客详细介绍了如何使用深度优先搜索(DFS)、DFS+记忆化(memo)和广度优先搜索(BFS)解决LeetCode的854题——K-Similar Strings。作者指出,对于这类问题,动态规划也是一个可行的解决方案,但重点在于分析字符串中不同字符,只对这些字符进行操作。文章中分别展示了三种方法的解题思路,并提到了DFS效率较低且可能因递归深度过大导致超时的问题,而DFS+memo和BFS则能有效提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天外面下雨,长江中下游地区特有的黄梅天让人身体很不舒服,不过在室内开着空调刷题倒是一件惬意的事情。今天做了两道题,分别是847和854两个题,这两道题其实属于同种类型的题目,解决办法也很类似,上一篇博客将847题的详细解题方法展示出来,现在趁热打铁,把854题的思路和代码也整理一下,加深对于DFS+memo和BFS的理解。

题目描述:


乍看这道题,其实首先想到的是用动态规划来解答这个题,后面我会补充这个题目的动态规划解法。

首先我们需要明确一件事,对于两个字符串,前面相同部分是不需要交换的,甚至对位相同的字符也是不需要交换的,因此我们的第一步是,取出两个字符串中不相同的字符组成需要交换才能相同的字符串,对这两个字符串进行操作即可,不需要动对位相同的字符。

方法一:普通的DFS方法,这个方法效率很低,在leetcode上跑的时间是1.6秒左右,太慢了,重复计算太多,如果将base case的结束条件定为pos==b.size(),就会出现TLE,说明当字符串长度很长的情况下,递归深度太深。代码勉强能过。

class Solution 
{
public:
    int kSimilarity(string A, string B) 
    {
        int n=A.size();
        string At,Bt;
        for(int i=0;i&l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值