题目类型:
字符串
题意:
Write a function to find the longest common prefix string amongst an array of strings.
找出一个字符串数组中所有字符串的最长共同==前缀==。
字符串API:
==indexOf()的用法==:返回字符中indexof(string)中字串string在父串中首次出现的位置,没有返回-1;
==lastIndexOf()的用法:==返回字符串中target的最后一次出现位置
我的思路:依次对比
效率:11%
- 初始化公共前缀sub为第一个字符串str[0]
- 如果有超过一个字符串,循环对比sub和之后的每一个字符串,取公共部分为sub
class Solution {
public String longestCommonPrefix(String[] strs) {
int len = strs.length;
if (len == 0) return "";
String prefix = strs[0];
if (len == 1) return prefix;
for(int i = 1; i < len; i++){
String cur = strs[i];
int prefixLen = prefix.length();
int curLen = cur.length();
boolean changed = false;
for (int j = 0; j < Math.min(prefixLen, curLen); j++) {
if (prefix.charAt(j) != cur.charAt(j)) {
prefix = prefix.substring(0, j);
changed = true;
break;
}
}
prefix = (!changed &&curLen < prefixLen) ? cur : prefix;
}
return prefix;
}
}
方法二:indexOf
效率:80%
- 初始化prefix为strs[0]
- 循环遍历strs的每一个字符串str,如果str.indexOf(prefix) == 0,证明公共前缀不变,仍未为prefix;如果不为0,那么可能未找到(prefix = abcd, str = abc),也可能在后面(prefix = abc, str = dabc),那么将==prefix截去最后一个字符==,再到该str中查找,直至找到位置为0或者不存在prefix(”“)
class Solution {
//方法二:indexOf
public String longestCommonPrefix(String[] strs) {
int len = strs.length;
if (len == 0) return "";
String prefix = strs[0];
if (len == 1) return prefix;
for (String str : strs) {
while (str.indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
}
}
return prefix;
}
}