文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>寻找两个字符串中的最大公串

寻找两个字符串中的最大公串

时间:2010-08-04  来源:yayapa

算法1: 循环生成第一个字符串的所有子串,按从大到小的顺序在第二个字符串中查找这些子串,找到即返回。   public String maxMutualStr(String str1, String str2)
{
    int len = str1.length();
    for (int i = 0; i < len; ++i)
    {
        for (int j = 0; j <= i; ++j)
        {
            String tmp = str1.substring(i, len - j);
            if (str2.contains(tmp)) return tmp;
        }
    }
    return null;
}
  算法2: 创建一个纵横长度分别是两个字符串长度的矩阵。初始化矩阵全0,然后遍历两个字符串,修改在相同字符所对应坐标的矩阵元素的值,使其等于左上角元素值加1。最后根据矩阵中最大值返回公串。  
public String maxMutualStr2(String str1, String str2)
{
    int[][] matrix = new int[str1.length()][str2.length()];//Java在这里对0长度数组的处理很好
    int pos = -1;
    int len = 0;
    for (int i = 0; i < str1.length(); ++i)
    {
        for (int j = 0; j < str2.length(); ++j)
        {
            if (str1.charAt(i) == str2.charAt(j))
            {
                matrix[i][j] = (i > 0 && j > 0) ? (matrix[i - 1][j - 1] + 1) : 1;
                if (matrix[i][j] > len)
                {
                    len = matrix[i][j];
                    pos = i;
                }
            }
        }
    }
    return len > 0 ? str1.substring(pos - len + 1, pos + 1) : null;
}
  显然,算法1的效率要比算法2差,因为有M*N次的字符串查找操作。算法2占用的空间有没有办法压缩压缩呢。。。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载