JAVA学习与LeetCode刷题——(一)最长公共前缀与String类

一:题目与分析

14. 最长公共前缀

题目描述:

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。**

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:

输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。

我的解答:

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length==0) return "";
        String prefix = strs[0];
        for(int i=1;i<strs.length;i++){
            while(strs[i].indexOf(prefix)!=0){
                prefix = prefix.substring(0,prefix.length()-1);
                if(prefix.isEmpty()) return "";
            }
        }
        return prefix;
    }
}`

分析过程:

这个题需要编写一个函数来查找一个字符串数组中的最长公共前缀。

输入是String[] strs
返回值是String ,
大致做法是:两个字符串取公共前缀,然后再递归地用这个公共前缀去作用下一个字符串

在判断开始条件,若数组为空, 返回空串q
首先初始化前缀为strs[0]这个字符串
在strs数组中进行遍历,
利用indexOf(String )这个方法,只要后面每个字符串中还能有公共的部分,那就一直操作下去。

操作的过程:前缀=前缀

while (strs[i].indexOf(prefix) != 0) {
           prefix = prefix.substring(0, prefix.length() - 1);
           if (prefix.isEmpty()) return "";
       }    

这个过程是这样的:
首先选取第一个字符串,那么最后返回的公共串必定为它的子串。
每次遍历到下一个字符串时,
只要strs[i]和prefix有公共部分,那么通过这样的操作:
每次缩减prefix,直到出现strs[i].indexOf(prefix)==0
这个操作十分巧妙,因为它代表着这个strs的前缀就是prefix,而prefix在逐渐缩减的过程中能够成为空串。在成为空串时就返回空。

在遍历完所有的字符串时,返回prefix。即为所求。

二:JAVA知识点分析

String 类的用法

(1)字符串的创建

最简单的创建方式:

String test = " Focus.autocomplete";

当然,String本身可以看作一个字符串数组,相关内容较为基础,这里不赘述。

(2)String类的几个重要方法

char charAt(int index)

返回指定索引处的 char 值。

int compareTo(String anotherString)

按字典顺序比较两个字符串。

int compareToIgnoreCase(String str)

按字典顺序比较两个字符串,不考虑大小写。

boolean equals(Object anObject)

将此字符串与指定的对象比较。

static String copyValueOf(char[] data)

返回指定数组中表示该字符序列的 String。

String concat(String str)

将指定字符串连接到此字符串的结尾。

int indexOf(int ch)

返回指定字符在此字符串中第一次出现处的索引。

int indexOf(int ch, int fromIndex)

返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

int indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引。

int indexOf(String str, int fromIndex)

返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

String substring(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。

(3)在此题中的使用

本题中主要使用了 indexOf与substring方法,
前文中已经提到了indexOf使用的好处,就是在于它通过一个返回待检验前缀串的下标来判断是否满足前缀条件。
当indexOf的返回值等于0时,既可以表达已经满足了前缀的要求,又可以表达无法找到这样的子串,保证了程序的正确性和鲁棒性。
而每次通过prefix=prefix.substring(0,prefix.length()-1)可以达到切削字符串的要求,这也是非常巧妙的一种做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值