最长子串匹配

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
struct Myans {
	short count;
	char direct;
};
using namespace std;
char arr[1000]="bdcaba";
char brr[1000]="abcbdab";
Myans ans[1001][1001];
int main() {
	//scanf("%s", arr);
	//scanf("%s", brr);
	int arr_len = strlen(arr);
	int brr_len = strlen(brr);
	for (int i = 0; i <= 1001; i++) {
		ans[i][0].count = -1;
		ans[0][i].count = -1;
	}
	vector<char> chs;
	chs.clear();
	for (int ac = 0; ac < arr_len; ac++) {
		for (int bc = 0; bc < brr_len; bc++) {
			if (arr[ac] == brr[bc]) {
				ans[ac + 1][bc + 1].count = ans[ac][bc].count + 1;
				ans[ac + 1][bc + 1].direct = 'x';
			}
			else {
				if (ans[ac + 1][bc].count >= ans[ac][bc + 1].count) {
					ans[ac + 1][bc + 1].count = ans[ac+1][bc].count;
					ans[ac + 1][bc + 1].direct = 'l';
				}
				else {
					ans[ac + 1][bc + 1].count = ans[ac][bc+1].count;
					ans[ac + 1][bc + 1].direct = 'u';
				}
			}
		}
		for (int i = 1; i < brr_len; i++) {
			cout << ans[ac + 1][i].count << ','<< ans[ac + 1][i].direct<<' ';
		}cout << endl;
	}
	cout << ans[arr_len][brr_len].count << endl;
	int ac = arr_len;
	int bc = brr_len;
	while (ac > 0 && bc>0) {
		if (ans[ac][bc].direct == 'x') {
			cout << arr[ac - 1] << ' ';
			bc--;
			ac--;
		}
		else {
			if (ans[ac][bc].direct == 'u') {
				ac--;
			}
			else {
				bc--;
			}
		}
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值