`
qsslwyf
  • 浏览: 3334 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

最长子字符串问题-动态规划法

阅读更多
public class LCSProblem  

    public static void main(String[] args) 
    { 
        String[] x = {"","A", "B", "C", "B", "D", "A", "B"}; 
        String[] y = {"","B", "D", "C", "A", "B", "A"};
         
        char[][] b = getLCSLength(x, y); 
         
        display(b, x, x.length -1, y.length - 1); 
    }  //B C B A
     
    public static char[][] getLCSLength(String[] x, String[] y) 
    { 
        char[][] b = new char[x.length][y.length]; 
        int[][] c = new int[x.length][y.length]; 
         
        for(int i=1; i< x.length; i++) 
        { 
            for(int j=1; j< y.length; j++) 
            { 
                if(x[i] == y[j]) 
                { 
                    c[i][j] = c[i-1][j-1] + 1; 
                    b[i][j] = '↖'; 
                } 
                else if(c[i-1][j] >= c[i][j-1]) 
                { 
                    c[i][j] = c[i-1][j]; 
                    b[i][j] = '↑'; 
                } 
                else 
                { 
                    c[i][j] = c[i][j-1]; 
                    b[i][j] = '←'; 
                } 
            } 
        }  

   for(int i=0; i < x.length; i++){
  for(int j=0; j < y.length; j++)
   System.out.print(c[i][j]+" ");
  System.out.println();
}

         
        return b; 
    } 
     
    public static void display(char[][] b, String[] x, int i, int j) 
    { 
        if(i == 0 || j == 0) 
            return; 
         
        if(b[i][j] == '↖') 
        { 
            display(b, x, i-1, j-1); 
            System.out.print(x[i] + " "); 
        } 
        else if(b[i][j] == '↑') 
        { 
            display(b, x, i-1, j); 
        } 
        else 
        { 
            display(b, x, i, j-1); 
        } 
    } 
分享到:
评论

相关推荐

    最长公共子序列--动态规划法实验

    总的来说,LCS问题和动态规划法的结合展示了如何运用编程技巧解决实际问题。理解这种算法不仅可以帮助我们解决字符串处理的问题,还能加深对动态规划这一核心算法的理解,为其他复杂问题的求解打下基础。在C++中实现...

    实验3-动态规划算法1

    实验3主要探讨了动态规划算法在解决实际问题中的应用,特别是针对两个核心问题:最长公共子序列(LCS)问题和最大子段和问题。动态规划是一种强大的算法设计策略,它通过将复杂问题分解为更小的子问题来求解,并存储...

    “最长公共字符串子序列”问题的动态规划法算法.pdf

    在这个问题中,目标是找到两个给定字符串(`a`和`b`)的最长公共字符串子序列,即在不改变字符顺序的情况下,两个字符串中都存在的最长子序列。 `First_Born_SubStr_Len`函数是计算两个字符串的最长公共子序列长度...

    第3周-3B-动态规划1

    动态规划是解决此问题的标准方法,通常构建一个二维数组来存储子问题的解,从而找到最长子序列的长度。 动态规划的核心在于理解问题的结构,构造合适的状态转移方程,并有效地存储中间结果以避免重复计算。这种思想...

    最长公共子序列问题 动态规划法.cpp.rar

    最长公共子序列(Longest Common Subsequence,LCS)问题是计算机科学中一个经典的字符串处理问题,它寻找两个序列之间的最长子序列,这个子序列不必连续但必须保持原序列的相对顺序。在本例中,提供的文件是使用C++...

    奥赛动态规划法最长公共子序列

    最长公共子序列(Longest Common Subsequence, LCS)是计算机科学中一种经典的字符串处理问题,主要应用于比较和分析两个序列的相似性。本问题的核心在于寻找两个给定序列中的最长子序列,该子序列并不需要连续,但...

    最长公共子序列动态规划算法

    这段代码实现了基于动态规划的LCS算法,能够正确输出两个字符串的最长公共子序列的长度。 #### 四、应用场景 LCS算法广泛应用于各种场景,包括但不限于: - **文本编辑器**: 在实现自动补全、拼写检查等功能时。 -...

    动态规划(二)

    动态规划的核心是“最优子结构”和“重叠子问题”。最优子结构是指一个问题的最优解包含其子问题的最优解;重叠子问题则是指在解决问题的过程中,会反复遇到相同的子问题。通过存储并利用子问题的解,我们可以避免...

    南京邮电大学算法分析与设计实验二(动态规划法)

    ### 南京邮电大学算法分析与设计实验二(动态规划法) #### 实验背景与目标 本实验属于南京邮电大学计算机学院开设的“算法分析与设计”课程的一部分,旨在通过具体实践加深学生对动态规划这一算法设计技巧的理解...

    2024Leetcode最新解题笔记

    动态规划解不同的子序列**:此题考查如何利用动态规划找到两个字符串之间的最长子序列,涉及的技巧包括状态定义、状态转移方程等。 - **626. 买卖股票的最佳时机 III**:本题考察如何利用动态规划策略,在有限次...

    动态规划.rar_动态规划_规划

    动态规划是一种在计算机科学和数学中广泛使用的算法设计方法,主要应用于解决最优化问题。它通过将复杂问题分解成子问题来求解,通常这些子问题是重叠的,并且求解过程中会避免重复计算,从而达到高效求解的目的。...

    dongtaiguihua.zip_动态规划_动态规划算法

    5. **最短编辑距离**:计算将一个字符串转换为另一个字符串所需的最少单字符操作次数,包括插入、删除和替换。 6. **矩阵链乘法**:动态规划可以找到最小代价的矩阵乘法顺序。 7. **最长递增子序列(LIS)**:在...

    动态规划 ACM培训资料

    3. 最长子序列:比如PKU2533题目,找出两个字符串的最长公共子序列,同样可以通过动态规划求解。 在实际应用中,动态规划不仅能够解决理论上的问题,还能在很多实际场景下找到最优解决方案,例如资源分配、路径规划...

    最长公共子序列算法C#实现

    1. **动态规划法**: 动态规划是一种解决复杂问题的有效策略,通过将问题分解为子问题并存储中间结果,避免了重复计算。对于LCS问题,我们可以创建一个二维数组dp,其中dp[i,j]表示序列1的前i个字符和序列2的前j个...

    求最长公共子序列动态规划

    此外,LCS 问题也可以通过其他算法解决,如自底向上的迭代法或使用启发式搜索策略,但动态规划方法通常是最直观且易于理解的。 总之,求最长公共子序列是一个典型的动态规划问题,它涉及到序列比较、状态转移和记忆...

    最长公共子序列问题.docx

    在这个问题中,给定两个字符串或字符序列A和B,目标是找到这两个序列的最长子序列,这个子序列既在A中也出现在B中,但不必连续。下面我们将深入探讨如何使用动态规划法来解决这个问题。 首先,我们需要理解字符序列...

    动态规划的很经典的教程.docx

    总的来说,动态规划是一种强大的算法思想,它能够解决一系列复杂问题,从最短路径到背包问题,再到字符串匹配等。掌握动态规划的基本概念、适用范围和解决策略,对于任何IT专业人士来说都是一项重要的技能,因为它在...

    动态规划,数字三角形 最大子段和问题 最长公共子序列

    动态规划是一种在计算机科学中广泛...它们不仅提供了理论上的理解,还在实际编程中有着广泛应用,如在数据结构优化、字符串处理、图论问题等众多领域。通过理解和掌握这些算法,开发者可以更好地应对复杂的计算挑战。

    算法系列之六:最长公共子序列(LCS)问题(连续子序列)的三种解法.doc

    第一重循环确定第一个字符串的对齐位置,第二重循环确定第二个字符串的对齐位置,每次循环确定一组两个字符串的对齐位置,并从此对齐位置开始匹配两个字符串的最长子串,如果匹配到的最长子串比已知的最长子串长,则...

    C笔试题总结

    5. **找最长子字符串**: - 找到字符串中最长的子字符串,可能涉及到滑动窗口、动态规划或双指针技术。具体实现取决于题目要求,例如最长公共子串、最长回文子串等。 6. **字符串转换为整数**: - C语言标准库...

Global site tag (gtag.js) - Google Analytics