标签:
字符串
题目:
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。
示例1
输入:[“abca”,“abc”,“abca”,“abc”,“abcc”]
返回值:“abc”
示例2
输入:[“abc”]
返回值:“abc”
反思:
这道题目刚拿到手的时候,一开始是懵的,因为感觉好混乱,那么多个字符串,你要同时找出他们的公共最长前缀,这该怎么找呀!!!
他给的示例是横向的,如果我们将其转换为纵向,如
“abca”,
“abc”,
“abca”,
“abc”,
“abcc”
然后把第一个进行拆分为一个个字符,将一个个字符与接下来的字符串的遍历到相同的位置进行比较,如果比较不相等,则最长公共前缀就是从0到上一个不相等的字符。
第二个需要注意的问题就是,因为是最长公共前缀,所以在每个字符串中都存在相同的前缀,假设第一个已经到c这里的,然后和第二个进行比较的时候,第二个已经到达的他的maxLength,所以直接返回即可
用到的知识点:
- 纵向单个遍历
- str[i].charAt(j)方法
- str[i].substring(0,j)左包右不包
代码:
public class Solution {
/**
*
* @param strs string字符串一维数组
* @return string字符串
*/
public String longestCommonPrefix(String[] strs) {
// write code here
if (strs == null ||strs.length == 0) {
return "";
}
int oneLength = strs[0].length();
// 遍历第一个字符串
for (int i = 0; i < oneLength; i++) {
// 遍历剩余的字符串
char temp = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) {
if (i == strs[j].length() || temp != strs[j].charAt(i)) {
return strs[0].substring(0, i);
}
}
}
return strs[0];
}
}