栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Common Subsequence 动态规划 java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Common Subsequence 动态规划 java

求最长公共子串序列问题:

首先理解什么是公共子串

这里公共子串不一定是连续的,字母相同也算,中间可以有间隔。

重点是一个判断点:串a和串b

 

if(a[i]==b[j]){
    相当于在矩阵中,当前值为左上方值加一
    结果集map[i][j] = map[i-1][j-1] + 1;
}
else{
    当前位置的上方和左边两个值的最大值
    map[i][j] = MATH.max(map[i][j-1],map[i-1][j])
}

后一步由前面的几步得来

ac代码

package com.work06;

import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            //两个字符串数组
            String x = sc.next();
            String y = sc.next();
            char[] a = x.toCharArray();
            char[] b = y.toCharArray();
            int la = x.length();
            int lb = y.length();
            int map[][] = new int[la+1][lb+1];
            for(int i=1;i<=la;i++)
            {
                for(int j=1;j<=lb;j++)
                {
                    if(a[i-1]==b[j-1])
                    //如果当前元素相同,则结果在前一步的结果加一
                    {
                        map[i][j]=map[i-1][j-1]+1;
                    }
                    else
                    //如果当前元素不相同
                    {
                        map[i][j]=Math.max(map[i-1][j],map[i][j-1]);
                    }
                }
            }
            System.out.println(map[la][lb]);
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602924.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号