文章

21

粉丝

0

获赞

19

访问

4.8k

头像
字符串编辑距离 题解:C++

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
string s1, s2;
vector<int> f;

int main() {
	cin >> s1 >> s2;
	int n1 = s1.size(), n2 = s2.size();
	f.resize(n2 + 1);
	// 边界
	for(int i = 0; i < n2 + 1; i++)
		f[i] = i;
	// 动态规划
	for(int i = 0; i < n1; i++){
		int pre = f[0];
		f[0] = i + 1;
		for(int j = 0; j < n2; j++){
			int tmp = f[j + 1];
			if(s1[i] == s2[j])
				f[j + 1] = pre;
			else
				f[j + 1] = min(min(f[j + 1], f[j]) , pre)+ 1;
			pre = tmp;
		}
	}
	
	cout << f[n2];
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发