zoukankan      html  css  js  c++  java
  • 最长公共字串(LCS)最长连续公共字串(LCCS)

    链接1:http://blog.csdn.net/x_xiaoge/article/details/7376220

    链接2:http://blog.csdn.net/x_xiaoge/article/details/7376217

    链接3:http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2764625.html

    LCS

    1、动态规划法:见链接1、3

    int LCS( string leftString, string rightString )
    {
    
    	int lenLeft = leftString.length();
    	int lenRight = rightString.length();
    	int **martix;
    	martix = new int *[lenLeft+1];
    
    	for (int i=0; i<=lenLeft; i++)
    	{
    		martix[i] = new int [lenRight+1];
    	}
    
    	for (int i = 0; i <= lenLeft; i++)
    		martix[i][0] = 0;
    
    	for (int j = 0; j <= lenRight; j++)
    		martix[0][j] = 0;
    
    	for (int i = 1; i <= lenLeft; i++)
    	{
    		for (int j = 1; j <= lenRight; j++)
    		{
    			if (leftString[i-1] == rightString[j-1])
    			{
    				martix[i][j] = martix[i-1][j-1] + 1;
    			}
    			else
    			{
    				if (martix[i-1][j] >= martix[i][j-1])
    					martix[i][j] = martix[i-1][j];
    				else
    					martix[i][j] = martix[i][j-1];
    			}
    		}
    	}
    
    	return martix[lenLeft][lenRight];
    }
    

      LCCS:

    1、递归算法如下:

    string GetLongestString(string strTmp1, string strTmp2,string  strTmp3)
    {
        int len1 = strTmp1.length();
        int len2 = strTmp2.length();
        int len3 = strTmp3.length();
        if (len1 > len2)
        {
            if (len1 > len3)
            {
                return strTmp1;
            }
        }
        else if (len2 > len3)
        {
            return strTmp2;
        }
        return strTmp3;
    }
    
    void LCCS(const std::string& str1, const std::string& str2,std::string& lccs)
    {
        if(str1.length() == 0 || str2.length() == 0)
            return;
    
        if(str1[0] == str2[0])
        {
            lccs += str1[0];
            LCCS(str1.substr(1), str2.substr(1), lccs);
        }
        else
        {
            std::string strTmp1,strTmp2,strTmp3;
    
            LCCS(str1.substr(1), str2, strTmp1);
            LCCS(str1, str2.substr(1), strTmp2);
            LCCS(str1.substr(1), str2.substr(1), strTmp3);
            std::string strLongest = GetLongestString(strTmp1, strTmp2, strTmp3);
            if(lccs.length() < strLongest.length())
                lccs = strLongest;
        }
    }
  • 相关阅读:
    算法——基础
    递归函数
    docker常用命令
    vue——计算属性和侦听器
    vue——指令系统
    vue——介绍和使用
    webpack、babel模块、模块化
    Nodejs介绍及npm工具使用
    ECMAScript 6简介
    easyui(入门)
  • 原文地址:https://www.cnblogs.com/shanguanghui/p/3617792.html
Copyright © 2011-2022 走看看