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