`
sulifeng
  • 浏览: 40909 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

<转载>--用动态规划算法对最大子串问题的java实现

阅读更多
转载自:http://www.blogjava.net/heack/archive/2009/09/15/295080.html

import java.util.HashMap;
import java.util.Map;
 
/**
* @author HEACK
*
*/
public class CompareStr {
 
        /**
        * @param args
        */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String str1 = "abcde1234567abcdefghijk";
                String str2 = "abcdefgh12345";
               
                //String str2 = "abc happyies dutcbirthday peter";
                CompareStr cj = new CompareStr();
                System.out.println(cj.getLongestString(str1,str2));
 
        }
 
        private boolean isEmpty(String str) {
                return str == null || str.trim().length() == 0;
        }
        private Map map = new HashMap();
 
        private String getLongestString(String str1, String str2) {
                if (isEmpty(str1) || isEmpty(str2)) {
                        return "";
                }
                StringBuffer key = new StringBuffer();
                key.append(str1).append("&&").append(str2);
                if (map.containsKey(key.toString())) {
                        return (String)map.get(key.toString());
                }
                StringBuffer longestStr = new StringBuffer();
                char[] str1List = str1.toCharArray();
                char[] str2List = str2.toCharArray();
                int i = 0;
                for (i = 0; i < str1List.length && i < str2List.length; i++) {
                        if (str1List[i] == str2List[i]) {
                                longestStr.append(str1List[i]);
                        } else {
                                break;
                        }
                }
                String subStr1 = str1.substring(i);
                String subStr2 = str2.substring(i);
                if (i == 0) {
                        String retStr1 = getLongestString(subStr1.substring(1), subStr2);
                        String retStr2 = getLongestString(subStr1, subStr2.substring(1));
                        String returnStr = retStr1.length() >= retStr2.length() ? retStr1 : retStr2;
                        map.put(key.toString(), returnStr);
                        return returnStr;
                } else {
                        String retStr1 = getLongestString(str1.substring(1), str2);
                        String retStr2 = getLongestString(str1, str2.substring(1));
                        String retStr = retStr1.length() > retStr2.length() ? retStr1
                    : retStr2;
                        String returnStr = retStr.length() >= longestStr.toString().length() ? retStr
                                        : longestStr.toString();
                        map.put(key.toString(), returnStr);
                        return returnStr;
                }
        }
 
}
分享到:
评论

相关推荐

    动态规划求最大匹配子串

    动态规划求最大匹配子串 ...动态规划求最大匹配子串是一个常见的计算机科学问题,我们可以使用动态规划算法来解决该问题,该算法的时间复杂度和空间复杂度均为O(n*m),其中n和m分别为两个字符串的长度。

    数据结构(C++)有关练习题

    &lt;br&gt;4、用邻接矩阵或邻接图实现一个有向图的存储,并实现单源最短路径算法的实现(这个类的一个成员函数),并能输出该图的关键路径。&lt;br&gt;注:1、要用面向对象的方法设计代码;&lt;br&gt;2、一个图是一个类的实例;&lt;br&gt;3、类...

    最大连续子串问题

    在编程领域,"最大连续子串问题"是一个经典的数据结构和算法问题,主要涉及数组处理和动态规划。这个问题要求从给定的数组中找到一个连续子数组,使得这个子数组的元素之和最大。这个问题有多种解法,包括暴力枚举、...

    数据结构——串的基本操作

    c++编写的串的基本操作。(全) cout&lt;&lt;"0-遍历"; cout&lt;&lt;" 1-初始化"; cout&lt;&lt;" 2-串赋值"; cout&lt;&lt;" 3-判串相等"&lt;&lt;endl; cout&lt;&lt;"4-求串长";...cout&lt;&lt;" 7-子串定位"&lt;&lt;endl; cout&lt;&lt;" 8-插入子串"; cout&lt;&lt;" 9-删除子串";

    java练习题及答案

    Java作为一种广泛使用的编程语言,其鲁棒性体现在多个方面。鲁棒性指的是程序能够处理各种异常情况而不崩溃的能力。Java通过以下特性确保了其鲁棒性: 1. **检查错误**:Java在编译和运行时都能检测并报告错误,这...

    动态规划实现两序列最大公共子串查找(Python代码)

    最大公共子串问题是IT行业的经典面试题之一,在生物信息等领域也有重要应用。该资源使用动态规划实现了最大公共子串查找算法,问题具体描述在Problem里,代码为code.py,调试结果请参考Readme。

    数据结构实验报告5-串-基于改进KMP算法的子串查代与替换-实验内容及要求.docx

    ### 数据结构实验报告知识点 ...通过本次实验,不仅加深了对KMP算法的理解,还掌握了如何使用C语言实现该算法。此外,还学会了如何设计合理的数据结构和算法来解决实际问题,提高了编程能力和问题解决能力。

    python实现对求解最长回文子串的动态规划算法

    在实际应用中,还可以考虑其他更高效的算法,如Manacher's Algorithm,它可以在`O(n)`的时间复杂度内解决这个问题,但实现起来相对复杂,需要对动态规划算法有深入的理解。 总之,Python实现的动态规划算法为解决...

    动态规划:最长公共子串 LCS

    - **时间复杂度**:使用动态规划方法计算最长公共子串的长度及其位置的时间复杂度为 \( \Theta(nm) \)。 - **实现步骤**: - 定义二维数组 \( dp[i][j] \) 表示字符串 \( S \) 的前 \( i \) 个字符和字符串 \( T ...

    +1和-1和最大的子串

    标题中的“+1和-1和最大的子串”是一个经典的计算机科学问题,它涉及到数组、字符串处理以及动态规划等概念。这个问题的目标是在一个由+1和-1组成的序列中找到和最大的连续子序列(子串),这里的“和”指的是子序列...

    C++实现找出两个字符串中最大的公共子串

    本主题将深入探讨如何使用C++语言来实现一个算法,该算法能够找出两个字符串中的最大公共子串。公共子串是指同时存在于两个或多个字符串中的任意非空字符序列。在本问题中,我们目标是找到最长的这样一个子串。 ...

    数据结构实验报告-串-基于改进KMP算法的子串查代与替换5分(第8周完成)-实验内容及要求.docx

    本实验旨在通过实际编程操作,加深对KMP字符串搜索算法的理解,并能够熟练运用C++语言实现基于改进KMP算法的子串查找与替换功能。 ## 实验内容 实验要求学生使用C++语言编写程序,实现一个基于改进KMP算法的子串...

    我的开发笔记--java

    例如,`&lt;p&gt;`标记用于创建段落,`&lt;pre&gt;`用于保留预格式化的文本,`&lt;br&gt;`用于换行,`&lt;blockquote&gt;`用于缩进引用,而`&lt;div&gt;`和`&lt;span&gt;`则作为区块和内联元素的容器。`&lt;hr&gt;`用于绘制水平线,`&lt;strong&gt;`和`&lt;em&gt;`用于加粗...

    删除子串删除子串删除子串删除子串,只要是原串中有相同的子串就删掉,不管有多少个

    在编程领域,删除字符串中的重复子串是一个常见的字符串处理问题。这个问题的核心是找出字符串中的所有重复子串,并将...这个过程涉及到字符串操作、动态规划和模式匹配等多个编程知识点,对提升编程能力非常有帮助。

    动态规划——最长公共子序列和最长公共子串之Python实现

    用Python实现动态规划中最长公共子序列和最长公共子串问题!

    动态规划算法-动态规划算法的基本思想.docx

    ### 动态规划算法的基本思想 #### 一、动态规划简介 动态规划是一种解决多阶段决策过程中的最优化问题的有效算法。它适用于那些可以分解成多个阶段,且每个阶段的决策仅依赖于当前阶段的状态而与历史状态无关的问题...

    java动态规划-单词拆分(csdn)————程序.pdf

    Java动态规划是指使用动态规划算法来解决问题的编程技术。动态规划是一种算法设计方法,它将问题分解成更小的子问题,并利用这些子问题的解来解决原问题。动态规划算法通常用于解决具有最优子结构的问题。 在本例中...

    近似串匹配的动态规划算法

    在压缩包中的"近似串匹配问题"文件可能包含了这样的C语言实现,可以作为学习和理解近似串匹配动态规划算法的一个实例。 总结一下,近似串匹配的动态规划算法是一种高效的方法,通过Levenshtein距离或Hamming距离...

    fasta算法,Smith-waterman算法,编辑距离算法,最长公共子串算法

    这个算法使用动态规划,通过填充一个二维矩阵来计算每对字符的匹配得分,然后找到得分最高的子矩阵,即为最长公共子序列。与fasta算法不同,SW算法不会因为得分低而提前终止,因此它能找出最佳的局部匹配,但计算...

    java面试-leetcode面试java编程题解之第5题最长回文子串-java题解.zip

    其中,第5题“最长回文子串”是经典的字符串处理问题,对于Java程序员来说,理解和解决这个问题至关重要。下面将详细探讨这个题目以及相关的Java编程知识点。 **题目描述:** 给定一个字符串`s`,找到`s`中的最长...

Global site tag (gtag.js) - Google Analytics