public class StringDifferent
{
public static void main(String[] args)
{
StringDifferent sd = new StringDifferent();
String res = null;
res = sd.strDif("abcde", "bcde");
System.out.println(res);
res = sd.strDif("dabc", "aabcef");
System.out.println(res);
res = sd.strDif("abcdefg", "abcdefg");
System.out.println(res);
res = sd.strDif("abfg", "abcdefg");
System.out.println(res);
res = sd.strDif("afsdlf", "sdlfajsdlfjsd");
System.out.println(res);
}
//这道题目相当于最长公共子序列的改进版,字符串进行二维存储了之后,就沿着相应的规则下来
//这样做不知道对不对,只能这样写了
String strDif(String str1, String str2)
{
StringBuilder sb = new StringBuilder();
String tmp = null;
// if(str1.length()>str2.length())
// {
// tmp = str1;
// str1 = str2;
// str2 = tmp;
// }
int dp[][] = new int[str1.length() + 1][str2.length() + 1];
int len1 = str1.length();
int len2 = str2.length();
//进行dp的方法
for (int i = 1; i <= len1; i++)
{
for (int j = 1; j <= len2; j++)
{
if (str1.charAt(i - 1) == str2.charAt(j - 1))
{
dp[j] = dp[i - 1][j - 1] + 1;
}
}
}
// for(int i=0;i<=len1;i++)
// {
// for(int j=0;j<=len2;j++)
// {
// System.out.print(dp[j]+",");
// }
// System.out.println();
// }
int i = len1, j = len2;
//如何获取其中的字符串
while (i >= 0 && j >= 0)
{
if (dp[j] == 0)
{
if (i < j)
{
tmp = "+" + str2.charAt(j - 1);
sb.insert(0, tmp);
j--;
}
else
{
//判断到头的情况
if (i == j && j == 0)
{
break;
}
tmp = "-" + str1.charAt(i - 1);
sb.insert(0, tmp);
i--;
}
}
else
{
i--;
j--;
}
}
return sb.toString();
}
}