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编程语言。
该题考察的知识点包括:
- 字符串的基本操作,如获取字符、获取长度等。
- 数组或列表的遍历和管理。
- 循环控制和条件判断。
代码解释:
- 在 findAncestor 方法中,首先检查输入的 names 数组是否为空或长度为0,如果是的话直接返回空字符串。
- 将第一个字符串作为基准字符串,然后找到所有字符串中长度最短的那个字符串,以保证在比较时不会越界。
- 使用一个 StringBuilder 对象 commonPrefix 来保存公共前缀。
- 通过循环遍历字符的位置,获取第一个字符串中当前位置的字符,并将其与其他字符串在相同位置的字符进行比较。
- 如果所有字符串在当前位置的字符都相同,就将该字符添加到 commonPrefix 中。
- 如果有任何一个字符串在当前位置的字符不同,就返回当前的 commonPrefix,表示找到了最长的公共前缀。
- 如果循环结束后没有返回,说明第一个字符串本身就是所有字符串的公共前缀,或者数组中只有一个字符串。
- 将 commonPrefix 转换为字符串并返回作为结果。