《LeetCode系列》---最长公共前缀

目录

一、题目描述

二、思路分析

代码分析:

第一种方法(通过startsWith方法)

第二种方法(横向扫描)


一、题目描述

题目名称: 最长公共前缀

难度:简单

《LeetCode系列》---最长公共前缀_第1张图片

通过题意,我们可以知道该题要求我们找一个字符串数组当中的公共前缀,然后返回该公共的字符串前缀部分。

二、思路分析

这道题的解题思路很简单。

  • 由于此处是一个字符串数组,那我们可以对该数组进行遍历,设定一个起始的字符串ret=strs[0],让其和后续数组下标的字符串strs[i]进行比较,看是否存在公共前缀。
  • 要是存在再让起始的字符串替换为该公共前缀,再让这个公共前缀和后续的字符串进行比较,直到遍历结束,那这个字符串就为最后的公共前缀.

代码分析:

第一种方法(通过startsWith方法)

String类中有一种方法为:

startsWith(String prefix) 用来测试此字符串是否以指定的前缀开头。

我们可以利用这种方法来判断一个字符串是否为指定字符串中的前缀开头。 

但遍历刚开始,我们还无法确认前缀信息,只能一步步遍历查找。


代码示例:

以字符串数组{"flower","flow","flight"}为例

《LeetCode系列》---最长公共前缀_第2张图片

 要对比每一个字符串中的公共前缀。

String ret=strs[0];

首先将数组中第一个字符串设定为起始ret,用一个for循环(从第二个字符串开始循环,循环次数为数组元素长度-1)

for(int i=1;i

要想比较出两个字符串中存在的公共部分,需要又用一个循环,对其起始字符串ret进行不断地修改截取。直到出现公共的部分,再将起始字符串修改为公共的字符串部分,之后继续和数组后续的字符串进行比较。

结束条件为:数组遍历结束ret被截取为长度为0的字符串

for(int i=1;i

但这个代码还有一个地方没考虑到,就是字符串数组的合法性。

在leetcode提交的时候,需要考虑多方面中可能会出现的问题。

此处还需要考虑字符串数组的合法性:(1)字符串数组长度是否为0

                                                             (2)字符串数组是否为null

if(strs.length==0||strs==null){
    //数组长度为0,没有字符串
    return "";
}

运行结果:《LeetCode系列》---最长公共前缀_第3张图片


 代码提交:

《LeetCode系列》---最长公共前缀_第4张图片

《LeetCode系列》---最长公共前缀_第5张图片

 


第二种方法(横向扫描)

上面的一种方法,实际上字符串尾开始遍历截取查找公共前缀。

而此处的第二种方法,是从字符串头开始遍历查找公共前缀的部分。

实现思路和第一种方法差不多,也是一种横向扫描。 

以字符串数组的第一个字符串为起始比较,然后对后续的字符串数组元素遍历比较。

写一个方法来返回两个字符串比较后的公共前缀字符串部分。

字符串查找公共前缀的方法: 

(1)从字符串头部开始找的话,通过对传入的两个字符串的字符进行依次比较。比较的次数为两个字符串中长度小短的一个。

(2)写一个循环比较条件,两个字符串中从i为0位置的字符开始比较,如果满足两个字符相等,则继续向字符串中下一个下标字符进行比较,直到循环结束。 

public String stringReturn(String s1,String s2)    
    int length=Math.min(s1.length(),s2.length());    //通过Math类中的min方法拿到较小长度的
    int i=0;        //定义的这个i为下面循环结束后,公共前缀截至的位置。
    while(i

后续代码跟第一个代码差不多,只需在循环中调用该方法即可,循环结束返回公共前缀ret.

还需注意的是,找不到公共前缀的情况(即ret字符串长度为0)字符串数组的合法性

public String longestCommonPrefix(String[] strs) {
    if(strs.length==0||strs==null){
        return "";
    }
    String ret=strs[0];
    for(int i=1;i

代码示例:

《LeetCode系列》---最长公共前缀_第6张图片

《LeetCode系列》---最长公共前缀_第7张图片


 代码提交:

《LeetCode系列》---最长公共前缀_第8张图片

 《LeetCode系列》---最长公共前缀_第9张图片

 

 

你可能感兴趣的:(LeetCode,java,leetcode)