583. Delete Operation for Two Strings Medium

这道题需要我们通过在两个字符串中分别删除一些字符,使得他们成为相等的字符串。跟编辑距离类似,我们采用动态规划来解决。(参考 http://blog.csdn.net/hhygcy/article/details/3948969)


实际上,我们需要做的其实是求出最长公共子序列(Longest Common Subsequence)。注意这里是子序列,不是子串,是可以不连续的,只要保持相对顺序就可以了。


我们用dis[i][j]来表示字符串word1长为i的子串和字符串word2长为j的子串,它们的最长公共子序列的长度。然后考虑状态转移方程。

class Solution {
public:
    int minDistance(string word1, string word2) {
        int dis[word1.size() + 1][word2.size() + 1];
        for(int i = 0; i <= word1.size(); i++){
        	for(int j = 0; j <= word2.size(); j++){
        		if(i == 0 || j == 0)dis[i][j] = 0; //子串为空,没有公共子序列
        		else {
        		    //状态转移:如果word1[i - 1] == word2[j - 1],相当于在两个子串后边加上相同的字符,公共子序列长度加一
                            //注意这里比较的是word1的第i个,下标就是i-1,和word2的第j个,下标就是j-1
	      		    //如果不相等,就由各加一个字符的两种情况下,最大值决定最长公共子序列
        			dis[i][j] = word1[i - 1] == word2[j - 1] ?  dis[i - 1][j - 1] + 1 : max(dis[i - 1][j], dis[i][j - 1]);
    			}
    		}
    	}
    	
    	int d = dis[word1.size()][word2.size()];
    	return word1.size() - d + word2.size() - d;
    }
};





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
checking whether the compiler supports GNU C++... yes checking whether g++ accepts -g... yes checking for g++ option to enable C++11 features... none needed checking dependency style of g++... gcc3 checking how to run the C preprocessor... gcc -std=gnu11 -E checking for x86_64-w64-mingw32-ranlib... no checking for ranlib... ranlib checking for x86_64-w64-mingw32-dlltool... no checking for dlltool... no checking for x86_64-w64-mingw32-ar... no checking for x86_64-w64-mingw32-lib... no checking for x86_64-w64-mingw32-link... no checking for ar... ar checking the archiver (ar) interface... ar checking dependency style of gcc -std=gnu11... gcc3 checking for x86_64-w64-mingw32-as... no checking for as... as checking whether dlltool supports --temp-prefix... yes checking whether to build a w32api package for Cygwin... no checking whether to build the Win32 libraries... yes checking whether to build the Win64 libraries... yes checking whether to build the WinARM32 libraries... no checking whether to build the WinARM64 libraries... no checking whether to use genlib... no checking whether to enable globbing... no checking whether to enable private exports... no checking whether to enable delay import libs... no checking what to provide as libmsvcrt.a... msvcrt-os checking whether to include support for Control Flow Guard... no checking whether to enable experimental features... no checking whether the compiler supports -municode... no checking for stdio.h... yes checking for stdlib.h... yes checking for string.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for strings.h... yes checking for sys/stat.h... yes checking for sys/types.h... yes checking for unistd.h... yes checking for _mingw_mac.h... no
06-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值