题解 | #牛族寻找祖先#
牛族寻找祖先
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]; } } }#题解#