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代码

这道题目主要考察了字符串处理的能力,特别是在寻找一组字符串的最长公共前缀方面的技巧。

  1. findAncestor 方法是解决这个问题的主要函数,接受一个字符串数组 names 作为参数,表示草原上牛的名字。
  2. 检查输入是否为 null 或数组长度为 0,如果是,直接返回空字符串 "",因为在这种情况下没有共同的祖先。
  3. 取出名字数组中的第一个名字,将其存储在 first 变量中,作为初始的公共前缀。
  4. 使用 prefixEnd 变量来跟踪当前公共前缀的结束索引,初始为 first 的长度。
  5. 接下来,使用一个循环从第二个名字开始遍历数组中的每个名字。
  6. 在内层循环中,我们使用指针 j 来逐个比较当前名字的字符和公共前缀的字符,直到字符不匹配、或者 j 超出了 prefixEnd、或者 j 超出了当前名字的长度。
  7. 一旦找到不匹配的字符,或者其中一个名字的字符用尽,我们就更新 prefixEnd 为当前 j 的值,即最长公共前缀的结束索引。
  8. prefixEnd 将存储最长公共前缀的结束索引。我们通过调用 substring 方法来从 first 中提取这个公共前缀,然后返回该前缀作为最终结果。
  9. 如果整个循环结束,即所有名字都比较完毕,而 prefixEnd 仍然等于 first 的长度,那么说明整个 first 就是最长公共前缀。
  10. 方法将返回找到的最长公共前缀。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务