编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
其实就是字符串相关方法的使用,可以先两两的去寻找公共前缀,找到前两个字符串的公共前缀,然后再把这个公共前缀在后一个字符串中去找匹配的。
第一步:判断边界,就是不存在公共前缀的情况;
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)指示索引位置,[开始,结束)