• 动态规划------最长公共子串(连续)


    采用二维数组来求解,只返回长度

    int lcs(string s1,int n,string s2, int m)
    {
        int result = 0;
        vector<vector<int>> c(n+1,vector<int> (m+1,0));
        
        for (int i = 1; i < n+1; i++)
            for (int j = 1; j < m+1; j++)
            {
                if (s1[i - 1] == s2[j - 1])
                {
                    c[i][j] = c[i-1][j - 1] + 1;
                    result = max(result, c[i][j]);
                }
                    
                else c[i][j] = 0;
            }
        return result;
    }
    View Code
    采用两个一维数组,一个存储当前值,一个存储上一轮字符串比较的值,并输出公共最长字符串
     
    int lcs(string s1,int n,string s2, int m)
    {
    	int result = 0;//字符串中连续相等的字符数的最大值
    	int pos = 0;//result出现的在字符串中的位置
    	vector<int> tmp(m, 0); //保存矩阵的上一行
    	vector<int> c(tmp);//保存当前行
    	
    	for (int i = 0; i < n; i++)
    	{
    		string s = s1.substr(i, 1);
    		c.assign(m, 0);
    		for (int j = 0; j < m; j++)
    		{
    			if (s2.compare(j,1,s)==0)
    			{
    				c[j] = (j == 0 ? 1 : (tmp[j - 1] + 1));
    				if (c[j]>result)
    				{
    					result = c[j];
    					pos = j;
    				}
    			}
    		}
    		tmp.assign(c.begin(), c.end());
    	}
    	for (int i = pos - result + 1; i <= pos; ++i)
    		cout << s2[i] << " " ;
    	cout << endl;
    	return result;
    }
    

      

  • 相关阅读:
    分数的表示和运算
    用户管理
    DML,DDL
    索引
    sql语句执行顺序
    伪劣
    序列
    视图
    完整性约束
    ASP.NET MVC学习笔记(二)登陆验证
  • 原文地址:https://www.cnblogs.com/wang-130213/p/9046110.html
Copyright © 2020-2023  润新知