一、题目描述
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8niBjmY4-1623632609116)(C:\Users\86182\AppData\Roaming\Typora\typora-user-images\image-20210603185630493.png)]](https://i-blog.csdnimg.cn/blog_migrate/69613a466832af88195c58765315b287.png)
二、解题思路
其实就是字符串相关方法的使用,可以先两两的去寻找公共前缀,找到前两个字符串的公共前缀,然后再把这个公共前缀在后一个字符串中去找匹配的。
三、代码编写步骤
第一步:判断边界,就是不存在公共前缀的情况;
1.字符串数组为空;
2.字符串数组长度为0,先声明要先判断是否为空才能判断这个条件。
第二步:声明一个pre来存放字符串数组中的第一个字符串
第三步:将字符串数组中剩下的字符串与pre逐一比较,查找公共前缀。
四、代码演示
class Solution {
public String longestCommonPrefix(String[] strs) {
//判断边界
if(strs == null || strs.length == 0){
return "";
}
//默认第一个字符串是公共前缀
String pre = strs[0];
int i = 1;
while (i < strs.length) {
//不断的截取
//查找pre字符串在str[i]中出现的位置,如果能完全匹配则返回0
while (strs[i].indexOf(pre) != 0)
//subString方法返回[开始,结束)处字符
pre = pre.substring(0, pre.length() - 1);
i++;
}
return pre;
}
}
第4行:判断边界,就是str为空或者长度为0,返回””
第8行:str[0]将字符串数组中的第一个元素”flower”赋值给pre。
第13行:这里i是从1开始的,查找pre字符串在strs[i]这个字符串中出现的位置,如果是完全匹配则返回0,没有完整的匹配返回的是-1。比如我在flower中去找flow返回0,在flow中找flower则返回-1。
第14行:以示例1为例,将flower切片,长度减1,此时pre=flowe,这时再去进行13行的判断,每次flower都减去一个末尾字符去跟flow比较直到找到他们的公共字符串,也就是能完全匹配
的判断,每次flower都减去一个末尾字符去跟flow比较直到找到他们的公共字符串,也就是能完全匹配
第15行:pre=pre.substring(0,pre.length()-1)指示索引位置,[开始,结束)
577

被折叠的 条评论
为什么被折叠?



