求两字符串的最长公有串 —— 我的“平移算法”

来源:互联网 发布:卡密软件刷q币软件下载 编辑:程序博客网 时间:2024/05/01 21:54

 

原创文章,转载请注明出处!

问题:
求A和B两个字符串的最长公共子串,并输出其长度。

分析:
我还没看过系统算法方面的书,不过我想以后要加强了,:-),目前我想到用“平移法”来计算最长公有串,还未分析过其它算法,不过我想,这个速度应该还不错。

原理:把两个字符串想像成两板木板,木板A短于木板B,让木板A在木板B上平移,从而找到垂直方向的公共字符串,进尔求得最长公有串

分解1

+-------------+|     A       |+-------------+         +---------------------+         |          B          |         +---------------------+         ^         i     

分解2

                      +-------------+                      |     A       |                      +-------------+         +---------------------+         |          B          |         +---------------------+                      ^                      i
代码实现:
#include "stdafx.h"#include <iostream>using namespace std;void get_substr(char* strA, char* strB, char* strSub);int _tmain(int argc, _TCHAR* argv[]){char* a = "hello, i am =weisunding!";char* b ="my name is -weisunding, you who??";char  substr[100] = {0};get_substr(a, b, substr);cout<<substr<<endl;system("pause");return 0;}//核心代码void get_substr(char* strA, char* strB, char* strSub){int sub_index = 0;int sub_len = 0;// strlen(s1) < strlen(s2)char* s1 = strA;char* s2 = strB;    if (strlen(strA) > strlen(strB))swap(s1, s2);    int len1 = strlen(s1);int len2 = strlen(s2);int x1,x2;for(int i = 1 - len1; i < len2; ++i){if (i <= 0){x1 = i + len1 - 1;x2 = 0;                           }else{x1 = 0;x2 = i;
if (len2 - x2 < sub_len)
    break;}
int len = 0;while( (x1 < len1) || (x2 < len2)){if ( s1[x1] == s2[x2]){++len;if (len > sub_len){sub_index = x2; //the last indexsub_len = len;}}else{len = 0;}++x1;++x2;}}if (sub_len)strncpy(strSub, s2 + sub_index - (sub_len - 1) , sub_len);}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3个月的宝宝认生怎么办 两个月的宝宝睡觉一惊一惊怎么办 六个月宝宝不喜欢喝水怎么办 三岁宝宝尿多怎么办 一岁的宝宝尿少怎么办 一岁宝宝尿黄怎么办 三岁宝宝尿黄怎么办 5个月宝宝认生怎么办 3岁宝宝怕生胆小怎么办 2岁宝宝怕生胆小怎么办 1岁半宝宝认生怎么办 宝宝认人一直哭怎么办 七个月宝宝认人怎么办 一个月宝宝认人怎么办 2个多月宝宝认人怎么办 婴儿认人一直哭怎么办 六个月宝宝认人怎么办 十一个月宝宝断奶后辅食怎么办 6个月宝宝不会坐怎么办 7个月宝宝坐不住怎么办 三个月宝宝白天闹觉怎么办 3个月宝宝不追声怎么办 一岁宝宝垃肚子怎么办 新生儿四天没大便怎么办老放屁 新生儿四五天不大便怎么办 新生儿五天没解大便怎么办 婴儿五天没拉大便怎么办 宝宝45天不拉屎怎么办 儿童4天不大便怎么办 4一5天不大便怎么办 俩月的宝宝便秘怎么办 宝宝6天没大便怎么办 新生儿3天不大便怎么办 50天宝宝几天没有大便怎么办 宝宝一吃奶就拉怎么办 2个月宝宝不拉屎怎么办 吃苹果呛到气管怎么办 三个月宝宝五天没拉大便了怎么办 三个月的宝宝五天不大便怎么办 十天婴儿不大便怎么办 宝宝断奶不喝牛奶怎么办