public static void getLongestSubString() {
		// 两个需要对比的字符串
		String x = "abcdehpoi";
		String y = "bcdehfpoidfdegsfet";

		int substringLength1 = x.length();
		int substringLength2 = y.length();
		// 第一步：构造需要遍历的二位数组
		int opt[][] = new int[substringLength1 + 1][substringLength2 + 1];

		// 定义三个临时变量：最大值，最大值横坐标和竖坐标
		int max = opt[0][0];
		int xCoordinate = 0, yCoordinate = 0;

		// 第二步：横向竖向对比字符，填充上面构造的二位数组。
		for (int i = 1; i <= substringLength1; i++) {
			for (int j = 1; j <= substringLength2; j++) {
				if (x.charAt(i - 1) == y.charAt(j - 1)) {
					// 横向和竖向的字符相同，改变改位置的值为左上角的值加1。
					opt[i][j] = opt[i - 1][j - 1] + 1;

					// 这里需要记录下最大值的值和坐标
					if (max < opt[i][j]) {
						max = opt[i][j];
						xCoordinate = i;
						yCoordinate = j;
					}
				}
			}
		}

		System.out.println("x = " + x);
		System.out.println("y = " + y);
		System.out.println("max = " + max);

		// 第四步：取出最大子串序列，并且展示。。。
		StringBuffer sb = new StringBuffer();
		for (int i = xCoordinate, j = yCoordinate; i >= 1 && j >= 1; i--, j--) {
			if (opt[i][j] > 0) {
				sb.append(x.charAt(i - 1));
			}
		}
		String result = sb.toString();
		// 上面的字符串是反的，这里反转输出结果
		for (int i = result.length() - 1; i >= 0; i--) {
			System.out.print(result.charAt(i));
		}
	}