首先把代码贴上来镇楼,然后慢慢讲这个思路。从下面得到的思路,动态规划的问题最主要的就是转移方程与状态方程的建立。
思考:当字符串从i到j处是回文,那么从i+1 到j-1处也一定是回文,就这样一直回溯 ,直到i=j ,设置为1,换成我自己的状态方程就是当x = y时,target[i,j] = 1,其他的时候为0 ,然后转移方程是当s1[i] = s1[j] 时,target[i,j] = target[i+1,j-1] + 2。
编程时遇到的问题就是index溢出问题,这个要仔细思考如何去设置,同时,x需要从大到小遍历,而不是常规的从小到大,因为数据是以对角线交叉传播的。
其实我们在这里还是有错误,错误在哪呢,就是该程序无法解决比如‘qweew’这样字符串的测试,因为该回文是偶数,这样如何解决呢?需要加几句话。
多加个if,当s1[i] = s1[i-1]且i>0时,target[i-1,i]为2,因为此刻比如qweew,i = 3 ,j -1 = 2,此时是回文,不过是2,所以target[2,3] = 2,表示字符串的index从2到3处的字符串是回文。