关于在字符串中获得所有的回文子序列的数量
来源:互联网 发布:oracle认证 java 编辑:程序博客网 时间:2024/06/06 04:26
当i=j时,f(i,j)=1。
当i<j并且string[i]=string[j]时,f(i,j)=f(i+1,j-1)+2。
当i<j并且string[i]≠string[j]时,f(i,j)=max( f(i,j-1), f(i+1,j) )。
注意如果i+1=j并且string[i]=string[j]时,f(i,j)=f(i+1,j-1)+2=f(j,j-1)+2=2,这就是“当i>j时f(i,j)=0”的好处。
由于f(i,j)依赖i+1,所以循环计算的时候,第一维必须倒过来计算,从string.length-1到0。
最后,string的最长回文子序列长度为f(0, string.length-1)。
好了,由这个方法拓展,怎么拓呢??设Get(i,j)为获取字符串string[i:j]中间所有回文子序列的函数
(1)对于string[i:j]来说,若有string[i]==string[j],则Get(i,j)由此几部分组成-------string[i]、string[j]、Get(i+1,j-1)、Get(i,j-1)、Get(i+1,j)、string[i]-string[j]、string[i]-Get(i+1,j-1)-string[j](因为最两头已回文,故与Get(i+1,j-1)相同,是比Get(i+1,j-1)长2个字符的回文子序列);
(2)若有string[i]!=string[j],则Get(i,j)由此几部分组成-------string[i]、string[j]、Get(i+1,j-1)、Get(i,j-1)、Get(i+1,j);
使用动态规划方法(由分治转换)
int main(void)
{
char str[30];
int scan_T,i=0,j=0,m=0,length=0,Sum=0;
int str_m[25][25];
scanf("%d",&scan_T);
for(i=0; i<scan_T; i++)
{
scanf("%s",str);
length=strlen(str);
// Sum=LPS_Develope(str,0,length-1);
memset(str_m,0,sizeof(str_m));
for(j=length-1; j>=0; j--)
{ //利用动态规划法求解
str_m[j][j]=1;//由分治法思路转换
for(m=j+1; m<length; m++)
{
if(str[j]==str[m])
str_m[j][m]=1+str_m[j+1][m]+str_m[j][m-1];
else
str_m[j][m]=str_m[j+1][m]+str_m[j][m-1]-str_m[j+1][m-1];
}
}
if(i!=scan_T-1)
printf("Case #%d: %d\n",i+1,str_m[0][length-1]);
else
printf("Case #%d: %d",i+1,str_m[0][length-1]);
}
return 0;
}
- 关于在字符串中获得所有的回文子序列的数量
- 计算字符串的最长回文子序列
- 关于字符串中回文子串的思考
- 字符串的最长回文子序列以及最长子串
- 求两个字符串的最长公共子序列的数量
- 求取任意字符串的所有子序列
- 寻找一个字符串的所有回文子字符串
- python求解给定一字符串列表判定每个字符串可以构成的所有序列中回文序列的数目
- 关于寻找两个字符串中最长子序列的问题
- C6-2 字符串的回文子序列个数
- 合并字符串中所有的子字符串
- 在字符串中查找不定数量的子串并输出
- 找出字符串中,指定的相同子串的数量
- 在Unity中获得一个物体的所有子物体包括孙物体。
- 插入最少的字符使字符串成为回文串 <最长公共子序列 + 回文>
- 关于JS中在字符串中查找具有最大数量字母方法的探究
- 最长递增子序列的数量
- 关于c#中获取listbox中选中项的数量和所有选项的数量
- java SLF4J 使用其他的 log框架
- MySQL在线学习1
- 蓝牙a2dp协议源码分析
- UI-Grid表格元素中多个空格显示为一个空格的解决办法
- suse linux 常用命令
- 关于在字符串中获得所有的回文子序列的数量
- ver0.83--init.m
- Spring+Velocity+Mybatis入门(step by step)
- 自适应的阈值化
- Python零基础入门之五字符串的格式化以及序列的内置函数
- zoj2782
- CUDA总结:共享内存
- css display={block,inline,inline-block}的认识
- Spring Ajax(2) 乱码处理