题解 | 最长公共子串

object Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * longest common substring
        * @param str1 string字符串 the string
        * @param str2 string字符串 the string
        * @return string字符串
    */
    fun LCS(s1: String,s2: String): String  {
        val builder = StringBuilder()
        val dp = Array<IntArray>(s1.length + 1) {IntArray(s2.length + 1)}
        var maxLen = 0
        var maxi = 0
        var maxj = 0
        for (i in 1..s1.length) {
            for (j in 1..s2.length) {
                dp[i][j] = if (s1[i-1] == s2[j-1]) dp[i-1][j-1] + 1 else 0
                if (dp[i][j] > maxLen) {
                    maxLen = dp[i][j]
                    maxi = i
                    maxj = j
                }
            }
        }
        if (maxLen <= 0) return "-1"
        for (x in 0..maxLen - 1) {
            builder.append(s1[maxi - x - 1])
        }
        return builder.reverse().toString()
    }
}



全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务