您的位置:首页 > 其它

曾经做的一道算法题,到目前为止,我觉得是最好的一道算法题了。

2012-08-22 15:17 176 查看
某学校进行打字比赛,比赛主要考查选手在规定时间内正确输入的字数。但问题是,如何确定每一个输入的字是否是正确的(即是否与原稿相同),因为完全存在选手错字、漏字和增字的情况,如:原稿为“abcde”,打字内容为“abece”.比较可靠的办法是计算打字内容与原稿的最大相似子序列的长度,所谓最大相似子序列即两者相等的子序列种最大的那个,如前面例子中两者最大相似子序列的长度为“abce”,长度为4,请设计程序计算两个字符串的最大相似子序列的长度!用java编写

这是题目,自己在论坛上找的。但是是看书后自己解决的。。嘿嘿

int count = 0;
		String a ="interneabct";
		String b ="returnabc";
		char[] aa = a.toCharArray();
		char[] bb = b.toCharArray();
		int weizhi = 0;
		b: for (int i = 0; i < bb.length; i++) {
			for (int j = 0; j < aa.length; j++) {
				if (bb[i] == aa[j]) {
					weizhi = j;
					break b;
				}
			}
		}
		int[][] aaa = new int[aa.length + 1][bb.length + 1];
		for (int i = 0; i < aa.length + 1; i++) {
			for (int j = 0; j < bb.length + 1; j++) {
				aaa[i][j] = 0;
			}
		}
		for (int j = 1; j < bb.length + 1; j++) {
			for (int i = 1; i < aa.length + 1; i++) {
				if (aa[i - 1] == bb[j - 1]) {
					if ((i - 1) >= weizhi) {
						aaa[i][j] = aaa[i - 1][j - 1] + 1;
					}
				} else {
					aaa[i][j] = Math.max(aaa[i - 1][j], aaa[i][j - 1]);
				}
			}

		}
		for (int j = 0; j < bb.length + 1; j++) {
			for (int i = 0; i < aa.length + 1; i++) {
				System.out.print(aaa[i][j]);
			}
			System.out.println();
		}
		System.out.println(aaa[aa.length][bb.length]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: