37.最长字符串链接
2011-07-27 10:39
197 查看
有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,
则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
思路 :分析一下,将各个字符串作为一个节点,首尾链接就好比是一条边,将两个节点连接起来,于是问题就变
成一个有关图的路径长度的问题。链接所得的字符串最长长度即为从图的某个节点出发所能得到的最长路
径问题,与最短路径类似,可以应用弗洛伊德算法求解。对于循环,即可认为各个节点通过其他节点又回
到自己,反应在路径长度上,就表示某个节点到自己节点的路径大于零(注:初始化个节点到自己的长度为零)。
如果在text字符串数组中再加一个"babc",就将形成环路,导致一些节点自身的路径非零,环路检测会报告出错。
则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。
思路 :分析一下,将各个字符串作为一个节点,首尾链接就好比是一条边,将两个节点连接起来,于是问题就变
成一个有关图的路径长度的问题。链接所得的字符串最长长度即为从图的某个节点出发所能得到的最长路
径问题,与最短路径类似,可以应用弗洛伊德算法求解。对于循环,即可认为各个节点通过其他节点又回
到自己,反应在路径长度上,就表示某个节点到自己节点的路径大于零(注:初始化个节点到自己的长度为零)。
#include<iostream> #include<string> using namespace std; #define length 14 bool Isconnect(string str1,string str2) { if(str1.size()!=str2.size()) return false; int m=str1.size(); for(int i=0;i<m-1;i++) { if(str1[i+1]!=str2[i]) return false; } return true; } void Maxstring(string str[]) { int G[length][length]={0}; for(int i=0;i<length;i++) for(int j=0;j<length;j++) if(Isconnect(str[i],str[j])) G[i][j]=1; for(int i=0;i<length;i++) for(int j=0;j<length;j++) for(int k=0;k<length;k++) { if(G[i][k]!=0&&G[k][j]!=0) { int dis=G[i][k]+G[k][j]; if(dis>G[i][j]) G[i][j]=dis; } } for(int i=0;i<length;i++) if(G[i][i]>1) { cout<<"circle is deteted"<<endl; return; } int max=0; for(int i=0;i<length;i++) for(int j=0;j<length;j++) { if(G[i][j]>max) max=G[i][j]; } cout<<"Max length is "<<max+str[0].size()<<endl; } int main() { string str[length]={ "abcd", "bcde", "cdea", "deab", "eaba", "abab", "deac", "cdei", "bcdf", "cdfi", "dfic", "cdfk", "bcdg", "babc"}; Maxstring(str); }
如果在text字符串数组中再加一个"babc",就将形成环路,导致一些节点自身的路径非零,环路检测会报告出错。
相关文章推荐
- 37 最长字符串链接
- 最长字符串链接
- 最长字符串链接
- java-------------华为-----------字符串链接最长路径查询
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离(链接)
- 用递归找一个字符串中 最长连续出现的字符的个数
- 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
- SPOJ 1812 Longest Common Substring II 后缀自动机求多字符串最长公共子串
- 寻找两个字符串中最长的公共子串源码(不使用strcmp)
- Life Forms 后缀数组 不小于k个字符串中的最长子串
- C#Excel2007和2003的链接字符串
- asp.net--常用的数据库链接字符串
- HDU 3068:最长回文【回文字符串】
- 字符串中最长的连续出现的字符【指针练习】
- 最长公共字符串(KMP)
- java中字符串链接性能比较
- Java求最长公共子字符串
- 计算两个字符串的最大公共字串的长度,字符不区分大小写(要求计算连续最长字串的长度)
- 一个字符串中求最长单词
- 求两个字符串的最长的连续公共子串(按位异或法)