字符串联接 【微软面试100题 第三十七题】
来源:互联网 发布:线切割编程入门图 编辑:程序博客网 时间:2024/05/01 00:22
字符串联接 【微软面试100题 第三十七题】
题目要求:
有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接。
问这n个字符串最多可以连成一个多长的字符串,如果出现死循环,则返回错误。
题目分析:
1.每个字符串都是长为m+1的字符串,两个字符串匹配后长度应该为1+m+1=m+2;
2.用图的思想来解。如果某两个顶点匹配,则在图中的该两点连线,当遍历完所有点之后,判断该图是否有环,没有就求该图的最长路径;
3.求图的最长路径与求最短路径类似,可以参考Floyd最短路径算法;
代码实现:
代码链接:http://blog.csdn.net/cxh342968816/article/details/6637006
#include<iostream>#include<string>using namespace std;#define length 14bool 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"};//用这个替换下面一行,就会形成环 "babf"}; Maxstring(str);}
0 0
- 字符串联接 【微软面试100题 第三十七题】
- 字符串匹配算法 【微软面试100题 第三十三题】
- 【100题】第三十七 字符串连接问题
- 跳台阶问题 【微软面试100题 第二十七题】
- 关于链表问题的面试题目 【微软面试100题 第七十七题】
- 微软面试100题---左旋字符串
- 最长递减子序列 【微软面试100题 第四十七题】
- 用两个栈实现队列 【微软面试100题 第五十七题】
- 两个闲玩娱乐 【微软面试100题 第六十七题】
- 微软等数据结构与算法面试100题 第三题
- 实现一个队列 【微软面试100题 第三十四题】
- 求比赛名次 【微软面试100题 第三十六题】
- 第三章十七题
- 微软面试100题
- 微软面试100题
- 微软面试100题
- 微软面试100题
- 微软面试100题
- 页面缓存
- 手动绑定数据到GridView并实现编辑,删除,取消···
- JavaScript回顾(2)
- Cocos2d-x游戏开发必知工具
- 机器学习的几个方法总结
- 字符串联接 【微软面试100题 第三十七题】
- 函数第四节
- 逻辑回归模型(Logistic Regression, LR)基础<转>
- ART模式不支持odex到oat的转换
- U盘
- C#中的异步陷阱
- 莫比乌斯带
- 实现图片在时间轴左右交替放置
- cocos2dx jni交互问题