[2014暴风影音笔试]求最长公共字串
来源:互联网 发布:振动检测软件 编辑:程序博客网 时间:2024/05/12 02:53
给定字符串A和B,输出A和B的第一个最长公共字串。比如A="wepiabc", B="pabcni",则输出"pabc"。
#include <iostream>#include <stack>using namespace std;void LCS(char *s1, char *s2){if (s1==NULL || s2==NULL){return;}//compute string lengthint iLen1 = 0;int iLen2 = 0;char *p = s1;while (*p != '\0'){p++;iLen1++;}p = s2;while (*p != '\0'){p++;iLen2++;}if (iLen1<=0 || iLen2<=0){return;}//LCSint *pLen = (int *)malloc((iLen1+1)*(iLen2+1)*sizeof(int));int *pPrev = (int *)malloc((iLen1)*(iLen2)*sizeof(int));memset(pLen, 0, (iLen1+1)*(iLen2+1)*sizeof(int));memset(pPrev, -1, (iLen1)*(iLen2)*sizeof(int));int nStrideLen = iLen2+1;int *pOrg = pLen+nStrideLen+1;//(1,1)for (int i=0; i<iLen1; ++i){for (int j=0; j<iLen2; ++j){if (s1[i]==s2[j]){pOrg[i*nStrideLen+j] = pOrg[(i-1)*nStrideLen+j-1]+1;pPrev[i*iLen2+j] = 0;//diagonal}else {int nN1 = pOrg[(i-1)*nStrideLen+j];//horizontalint nN2 = pOrg[(i)*nStrideLen+j-1];//verticalpOrg[i*nStrideLen+j] = (nN1>nN2? nN1:nN2);pPrev[i*iLen2+j] = (nN1>nN2? 1:2);}}}//print out LCSint i = iLen1-1;int j = iLen2-1;stack<char> s;pOrg = pLen+nStrideLen+1;while (i>=0 && j>=0){if (pPrev[i*iLen2+j]==0){s.push(s2[j]); j--;i--;}else {(pPrev[i*iLen2+j]==1)? i--:j--;}}while (!s.empty()){cout<<s.top();s.pop();}cout<<endl;free(pLen);free(pPrev);}int main(){char s2[] = "wepiabc";char s1[] = "pabcni";LCS(s1, s2);}
- [2014暴风影音笔试]求最长公共字串
- 暴风影音2014笔试算法题汇总
- 暴风影音2014笔试算法题汇总
- 暴风影音笔试题 2014 武汉站
- 暴风影音2014笔试算法题汇总
- 试探讨暴风影音2014笔试题
- 暴风影音笔试总结
- 暴风影音 笔试题
- 暴风影音笔试题
- [经典面试题][暴风影音]暴风影音2014校招笔试题
- F 求最长公共字串 hash+二分
- 求两个字符串最长公共字串
- 2014年9月16日----暴风影音笔试题
- 2014暴风影音校招技术笔试题(长春站)
- 2014暴风影音校园招聘笔试题(华科站)
- 2014暴风影音校招研发类笔试题
- 暴风影音2014校园招聘笔试题目-技术D卷
- (对错自己悟哦~)2014暴风影音笔试题
- 利用开源程序wecenter搭建的电子开发垂直问答网站
- 存储器
- CodeForces 349B Color the Fence (贪心)
- Oracle默认端口清单
- 解决VS2010创建的文档非常大的问题
- [2014暴风影音笔试]求最长公共字串
- ubntu笔记6_用codeblock访问MySQL数据库(解决IDE链接MySQL数据库问题
- 物理层
- mysql 语句大全
- 机器学习的数学基础 1. 共轭先验 Conjugate Prior
- css行高line-height的深入理解及应用
- MAC 设置命令行的提示跟linux不一样。
- python将多行字符串转换为单行字符串
- UNIX线程