计算两个字符串的最大公共字串的长度,字符不区分大小写(要求计算连续最长字串的长度)
来源:互联网 发布:重庆理工大学网络教育 编辑:程序博客网 时间:2024/05/15 13:55
思路:
利用动态规划的思想计算。
首先假设str1的长度为n,str2的长度为m,建立一个n*m的二维数组dp,dp[i][j]表示str1[0...i]和str2[0...j]中连续相等最大字串的长度,并用n记录,当str1[i]!=str2[j],令dp[i][j]==0;
对于数字的第一行和第一列,由于最长的公共字符串长度为1,所以只要出现字符相等,就令n=1。由于是求最大连续字串,所以当str1[i]==str2[j],dp[i][j]=dp[i-1][j-1]+1;
#include<iostream>#include<string>#include<cstring>using namespace::std;//按题目要求是连续的相等子序列//动态规划int main(){string A;while (cin >> A){string B;cin >>B;int l1 = A.size();int l2 = B.size();//生成二维数组int** dp = new int*[l1];for (int i = 0; i < l1; i++){dp[i] = new int[l2];}for (int i = 0; i < l1; i++){for (int j = 0; j < l2; j++) { dp[i][j]=0; } }int n = 0;for (int i = 0; i < l1; i++){for (int j = 0; j < l2; j++){if (A[i] != B[j])dp[i][j] = 0;else if (i == 0 || j == 0)//对于第一行和第一列{dp[i][j] = 1;if (n < 1)n = dp[i][j];} else{ dp[i][j] = dp[i - 1][j - 1] + 1; if (dp[i][j] > n) n = dp[i][j];}}}cout << n << endl; }return 0;}
阅读全文
0 0
- 计算两个字符串的最大公共字串的长度,字符不区分大小写(要求计算连续最长字串的长度)
- 题目标题: 计算两个字符串的最大公共字串的长度,字符不区分大小写
- 华为机试:计算两个字符串的最大公共字串的长度,字符不区分大小写
- 计算两个字符串的最大公共字符串的长度,字符不区分大小写
- 计算两个字符串的最长公共字串长度(java编程)
- 比较两个字符串的最长公共子序列的长度,字符不区分大小写
- 求两个字符串最大的公共字串的长度
- C计算最大回文字串的长度
- 求两个字符串的最长公共字串(连续)
- 求一个字符串中最长的相同字符字串 不区分大小写
- OJ 系列之求两个字符串最大的公共字串的长度
- 求两个字符串的最大连续公共字串
- 求两个字符串的最大连续公共字串
- 求两个字符串的不连续的公共字串
- C#/WPF 计算字串的真实长度
- 求两个字符串的最大公共字串
- 求两个字符串的最大公共字串
- 两个字符串中最大的公共字串
- python笔记3-django简单总结
- SHUOJ多项式构造
- OpenCV边缘提取
- Android学习之Fragment
- 初涉行人再识别
- 计算两个字符串的最大公共字串的长度,字符不区分大小写(要求计算连续最长字串的长度)
- Java API访问ZK的权限控制
- linux ar命令用法
- python参数传递问题(参数传出)
- 关于Activity,看这一篇就够了
- 82. Remove Duplicates from Sorted List II
- 解决Centos7 下中文乱码
- BI系统研究(初级)
- BZOJ 2565 双回文子串 Manacher 蜜汁贪心QQQ