思路:该题求连个子串的公共长度,不要求子串一定连续。子串长度有两种情况,第一种,其中任意一个子串的长度为0,那公共长度就一定为0 第二种,就是子串长度不为0,在子串长度不为0 的情况下又有2种情况,子串长度相等,子串长度不相等。 可用穷举法求解或动态规划法求解。 设第一字符串为A,第二个字符串为B,公共子串为C,i为A的下标j为B的下标
可以得到下列公式:
当其中有一个子串长度为0时 i==0||j==0 c[i,j]=0;
当Ai==Bj时,跳过该字符,两个字符串当前位置同时后移,比较后面的字符 c[i,j]=c[i-1,j-1]+1;
当Ai!=Bj时,分两个情况讨论:
第一种情况:i的位置固定不动,遍历j,找到i对应的字符串中与当前位置相同的元素
第二种情况:遍历i,找到j对应的字符串中与当前位置相同的元素,j的位置固定不动
然后对这两种情况进行比较,得到最大值,存入用来存储子串的数组中 c[i,j]=Math.Max((c[i,j-1]),(c[i-1,j]))
得到所有元素之后,就需要以