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 shortestLength = first.length();

        // 找到最短的字符串长度
        for (String name : names) {
            shortestLength = Math.min(shortestLength, name.length());
        }

        StringBuilder commonPrefix = new StringBuilder();

        // 逐个比较字符
        for (int i = 0; i < shortestLength; i++) {
            char currentChar = first.charAt(i);

            for (int j = 1; j < names.length; j++) {
                if (names[j].charAt(i) != currentChar) {
                    return commonPrefix.toString();
                }
            }

            commonPrefix.append(currentChar);
        }

        return commonPrefix.toString();
    }
}

Java编程语言。

该题考察的知识点包括:

  • 字符串的基本操作,如获取字符、获取长度等。
  • 数组或列表的遍历和管理。
  • 循环控制和条件判断。

代码解释:

  1. 在 findAncestor 方法中,首先检查输入的 names 数组是否为空或长度为0,如果是的话直接返回空字符串。
  2. 将第一个字符串作为基准字符串,然后找到所有字符串中长度最短的那个字符串,以保证在比较时不会越界。
  3. 使用一个 StringBuilder 对象 commonPrefix 来保存公共前缀。
  4. 通过循环遍历字符的位置,获取第一个字符串中当前位置的字符,并将其与其他字符串在相同位置的字符进行比较。
  5. 如果所有字符串在当前位置的字符都相同,就将该字符添加到 commonPrefix 中。
  6. 如果有任何一个字符串在当前位置的字符不同,就返回当前的 commonPrefix,表示找到了最长的公共前缀。
  7. 如果循环结束后没有返回,说明第一个字符串本身就是所有字符串的公共前缀,或者数组中只有一个字符串。
  8. 将 commonPrefix 转换为字符串并返回作为结果。