今天外面下雨,长江中下游地区特有的黄梅天让人身体很不舒服,不过在室内开着空调刷题倒是一件惬意的事情。今天做了两道题,分别是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