LeetCode( Longest Common Prefix)最长公共前缀(需要回顾!)

本文介绍了一种寻找字符串数组中最长公共前缀的方法,通过选取第一个字符串作为基准,逐个字符对比其余字符串,直至找到不匹配的位置。此外还讨论了其他几种方法,如选取任意字符串进行前缀匹配和使用字典树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Write a function to find the longest common prefix string amongst an array of strings.
找出所有字符串数组中的公共前缀。
一、我的第一想法是,拿第一个字符串作为基准,取它的每一位和剩余所有字符串的相对应的位数相比较,如果相同存储这位的字符,并继续向后移动,一旦出现某个字符串的当前位和第一个字符串当前位的内容不相同,停止后移。那么,第一个字符串从开始到这个位置(不包括)为止,就是所求。
我的代码如下:

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0)
            return "";
        StringBuffer result = new StringBuffer("");
        String first = strs[0];
        int len = strs.length;
        for(int i=0;i<first.length();i++){
            char c = first.charAt(i);
            int j;
            for(j=1;j<len;j++){
                if(strs[j].length() == i || strs[j].charAt(i) != c){
                    break;
                }
            }
            if(j == len)
                result.append(c);
            else
                break;
        }
            return result.toString();
    }
}

有几点需要注意:

  1. 返回值不能是null,而应该是“”(空字符串),判断的时候也应该按照字符串的长度是否为0,而不能判断strs == null。这很重要!
  2. 还要注意,可能后面字符串的位数要小于第一位的位数,即第二个for循环中的if判断条件。
  3. 这里使用了StringBuffer来拼接字符串!

二、除此之外,还有一些方法。比如说:
1、所求的最长公共前缀子串一定是每个字符串的前缀子串。所以随便选择一个字符串作为标准,把它的前缀串,与其他所有字符串进行判断,看是否是它们所有人的前缀子串。这里的时间性能是O(m*n*m)。
这是通过别人博客看到的,不是说这个方法好,而是说通过这个方法可以学到这么一个:怎么得到一个字符串的前缀(只需要截取字符串的substring函数的前i为即可),以及如何判断这个前缀是不是另一个字符串的前缀(同时移动指针即可)。
2、字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
这道题可以用到Trie树,这个我还没有学习,而且还和哈希有着一定的关系,所以先列出这个,之后会和哈希一块进行学习。具体代码参考下面的网址就好!

注:等做完字符串的最长公共子序列、子串等等相关的问题,再重新总结一遍!

参考:
http://blog.youkuaiyun.com/ojshilu/article/details/12882835
https://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值