Java 题解 | #牛族寻找祖先#
牛族寻找祖先
https://www.nowcoder.com/practice/eea77a55616f4961801796c7d36369db
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param names string字符串一维数组 * @return string字符串 */ public String findAncestor (String[] names) { // write code here if (names == null || names.length == 0) { return ""; } String first = names[0]; int prefixEnd = first.length(); for (int i = 1; i < names.length; i++) { String current = names[i]; int j = 0; while (j < prefixEnd && j < current.length() && first.charAt(j) == current.charAt(j)) { j++; } prefixEnd = j; } return first.substring(0, prefixEnd); } }
Java代码
这道题目主要考察了字符串处理的能力,特别是在寻找一组字符串的最长公共前缀方面的技巧。
- findAncestor 方法是解决这个问题的主要函数,接受一个字符串数组 names 作为参数,表示草原上牛的名字。
- 检查输入是否为 null 或数组长度为 0,如果是,直接返回空字符串 "",因为在这种情况下没有共同的祖先。
- 取出名字数组中的第一个名字,将其存储在 first 变量中,作为初始的公共前缀。
- 使用 prefixEnd 变量来跟踪当前公共前缀的结束索引,初始为 first 的长度。
- 接下来,使用一个循环从第二个名字开始遍历数组中的每个名字。
- 在内层循环中,我们使用指针 j 来逐个比较当前名字的字符和公共前缀的字符,直到字符不匹配、或者 j 超出了 prefixEnd、或者 j 超出了当前名字的长度。
- 一旦找到不匹配的字符,或者其中一个名字的字符用尽,我们就更新 prefixEnd 为当前 j 的值,即最长公共前缀的结束索引。
- prefixEnd 将存储最长公共前缀的结束索引。我们通过调用 substring 方法来从 first 中提取这个公共前缀,然后返回该前缀作为最终结果。
- 如果整个循环结束,即所有名字都比较完毕,而 prefixEnd 仍然等于 first 的长度,那么说明整个 first 就是最长公共前缀。
- 方法将返回找到的最长公共前缀。