题目内容
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".
Example:
Input: ["flower","flow","flight"]
Output: "fl"
Example 2:
Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
Note:
All given inputs are in lowercase letters a-z.
分析过程
-
题目归类:
垂直比较
-
题目分析:
最简单的思路就是从头开始,第一轮比较第一个字符,第二轮比较第二个字符·····这样的效率比较低。
新的方法是,(接下来的数组代表字符串,0代表strs[0])0和1比较后存到0,然后0和2比较后保存到0·····
利用String.substring(左闭右开)可以快速获得前缀。 -
边界分析:
- 空值分析
当strs为空时当然返回"" - 循环边界分析
- 空值分析
-
方法分析:
- 数据结构分析
- 状态机
- 状态转移方程
- 最优解
-
测试用例构建
代码实现
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs==null||strs.length==0){
return "";
}
for(int i = 1;i<strs.length;i++){
strs[0]=findPrefix(strs[0],strs[i]);
if(strs[0].length()==0)
return "";
}
return strs[0];
}
public String findPrefix(String a, String b){
if(a.length()==0||b.length()==0)
return "";
int length = a.length()<=b.length()?a.length():b.length();
for(int i = length; i>-1;i--){
if(a.substring(0,i).equals(b.substring(0,i))){
return a.substring(0,i);
}
}
return "";
}
}