编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
思路
- 双重for循环
- 遍历第一个字符串的所有子字符
- 将第一个字符串的所有子字符取出来
- 遍历第一个字符串的任意子字符对应的列的所有字符串的子字符
- 只有当遍历到的
i==strs[j].length()
,说明被比较的字符串0~ i-1都有字符并且和第一个字符串0~ i-1的字符相同,并且strs[0]这一行已经遍历完,strs[0]在0~i都是相同的,才截取第一个字符串0-i-1的字符串 - 只有
当c和遍历到的strs[j].charAt(i)不一样
的时候,才截取第一个字符串0-i-1的字符,并不是每次循环遍历都截取,而是满足条件再截取 - 返回处理后的字符串
class Solution {public String longestCommonPrefix(String[] strs) {if(strs==null || strs.length==0){ return "";} //判断数组不为空for(int i=0;i<strs[0].length();i++){ //遍历第一个字符串的所有子字符char c = strs[0].charAt(i); //将第一个字符串的所有子字符取出来for(int j=0;j<strs.length;j++){ //遍历第一个字符串的任意子字符对应的列的所有字符串的子字符if(i==strs[j].length() || strs[j].charAt(i)!=c){ // 只有当遍历到的i==strs[j].length(),说明被比较的字符串0~i-1都有字符并且和第一个字符串0~i-1的字符相同,并且strs[0]这一行已经遍历完,strs[0]在0~i都是相同的,才截取第一个字符串0-i-1的字符串return strs[0].substring(0,i); //只有当c和遍历到的strs[j].charAt(i)不一样的时候,才截取第一个字符串0-i-1的字符,并不是每次循环遍历都截取,而是满足条件再截取}}}return strs[0]; //返回处理后的字符串}
}