题解 | #牛族寻找祖先#

牛族寻找祖先

https://www.nowcoder.com/practice/eea77a55616f4961801796c7d36369db

题目考察的知识点是:

字符串的分割、包含、截取。

题目解答方法的文字分析:

先判断数组中有几个字符串,如果小于1个则直接返回;如果大于1个则,

1、把两个字符串分别以行和列组成一个二维矩阵。

2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。

3、通过查找出值为1的最长对角线就能找到最长公共子串。

本题解析所用的编程语言:

java语言。

完整且正确的编程代码:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param names string字符串一维数组
     * @return string字符串
     */
    public String findAncestor (String[] names) {
        // write code here
        if (names.length > 1) {
            int m = names[0].length(), n = names[1].length();
            int[][] dp = new int[m + 1][n + 1];
            int max = 0, index = 0;
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (names[0].charAt(i) == names[1].charAt(j)) {
                        dp[i + 1][j + 1] = dp[i][j] + 1;
                        if (max < dp[i + 1][j + 1]) {
                            max = dp[i + 1][j + 1];
                            index = i + 1;
                        }
                    }
                }
            }
            String str = names[0].substring(index - max, index);
            if (str.length() > 1) {
                return str;
            } else {
                return "";
            }
        } else {
            return names[0];
        }
    }

}
#题解#
全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务