解题思路
这里参考了算法:最长公共前缀 - 简书 (jianshu.com)
自己思路
当时想采用挨个对比的方法,就是找出1和2相同的部分L,如果没有,直接返回false,有的话,再用L去和3比较,得到H。但是当时考虑由于挨个单词都是字符串而不是数组,并不好拆分开来比较,于是卡在了这一步
参考思路
解法一
采用暴力循环的办法:1.先找出最短的字符串,2.依次对字符串进行筛选,判断哪一个是前缀
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.length == 0) {
return "";
}
string min=strs[0];
int minlength=min.length();
for(int i=1;i<strs.length;i++){
if(min>strs[i].length()){
min=strs[i];
minlength=strs[i].length();
}
}
int index=minlength;
string result="";
while(index>0){
string sub=min.substring(0,index);
boolean max=ture;
for(int i=1;i<strs.length;i++){
if(strs[i].startsWith(substring)==false){
mac=false;
break;
}
}
if(max){
result=sub;
break;
}
index--;
}
return result;
}
};
** s.substring(pos, len)函数** 表示拷贝s字符串从pos到len中间的字母 s.startsWith(a)函数 判断字符串s是否以a开头
解法二
采用水平扫描法,就是一开始我的解题思路
先假设第一个字符串result就是最长前缀,然后一次进行比较,更新result,再进行下一次的比较
public String longestCommonPrefix3(String[] strs) {
if(strs.length == 0) {
return "";
}
String result = strs[0];
for(int i=0; i<strs.length; i++) {
while(strs[i].indexOf(result) != 0) {
result = result.substring(0, result.length()-1);
if(result.length() == 0) {
return "";
}
}
}
return result;
}
s.indexOf(a)函数 返回a在s中出现的第一个地址