LeetCode之14---Longest Common Prefix

题目:

  Write a function to find the longest common prefix string amongst an array of strings.

题目大意:

    写一个函数,求一个字符串数组中最长的公共前缀子串。

思路:

  在做这道题之前先要了解一下什么叫做公共前缀子串。在英语中一个单词可以分为前缀、词根、后缀三部分,所谓前缀就是指在单词的开头处的一个或几个字符。相应的,字符串的前缀子串就是指字符串从第一个字符算起的一个或某几个字符,比如:abcdef和abcedf的最长公共前缀子串是abc而abcdef和bbcdef的最长公共前缀子串是空字符串,切不可以为是bcd。具体思路如下:

  1、如果为空,直接返回空字符串

  2、寻找数组中最小长度的字符串,防止越界

  3、以最小长度的字符串为外循环(因为最长的公共前缀不会长于最小长度的字符串),每次检查所有的字符串是否相等,如果有一个不相等则已经没有必要再检查下去,直接返回结果字符串,如果都相等则将本次扫描的字符加在结果串上。

代码:

class Solution {
public:
    std::string longestCommonPrefix(std::vector<std::string>& strs) {

        //如果为空,直接返回空字符串
        if (strs.size() == 0) {
            return "";
        }

        std::string result = "";

        //寻找最小长度的字符串,防止越界
        auto minSize = strs[0].size();
        for (auto &a : strs) {
            if (a.size() < minSize) {
                minSize = a.size();
            }
        }

        //以最小长度的字符串为外循环(因为最长的公共前缀不会长于最小长度的字符串)
        //每次检查所有的字符串是否相等
        for (int i = 0; i < minSize; ++i) {
            for (int j = 0; j + 1 < strs.size(); ++j) {
                if (strs[j][i] != strs[j + 1][i]) { //如果有一个不相等则已经没有必要再检查下去
                    return result;
                }
            }
            result += strs[0][i]; //如果都相等则将本次扫描的字符加在结果串上
        }

        return result;
    }
};
时间: 2024-10-12 09:07:15

LeetCode之14---Longest Common Prefix的相关文章

[LeetCode][Python]14: Longest Common Prefix

# -*- coding: utf8 -*-'''__author__ = '[email protected]'https://oj.leetcode.com/problems/longest-common-prefix/14: Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings.===Comments by Dabay===注意边

【LeetCode】14 - Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings. Solution: 1 class Solution { 2 public: 3 string longestCommonPrefix(vector<string>& strs) { //runtime:4ms 4 string str=""; 5 if(strs.empty())return

leetCode 14. Longest Common Prefix 字符串

14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings. 题目大意:求一组字符串的最长前缀. 代码如下: class Solution { public:     string longestCommonPrefix(vector<string>& strs) {         if(strs.size() == 0)

14. Longest Common Prefix【leetcode】

14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings. 寻找一个数组中最长的公共前缀 例如["baaa","caaabbb","aaaa"]输出"aaa" 结题思路: 判断非空的情况在进行计算 取第一个字符串最为标杆进行对比,因为最终结果一定在第一位中 用第一

leetcode -- 刷效率 Longest Common Prefix

题目描述: Write a function to find the longest common prefix string amongst an array of strings. 很简单的一道题目,但是我写了3个不一样的版本,运行时间确实数倍之差..贴代码如下: 版本1: 这个版本的运行时间为  44 ms 版本2: 这个版本的运行时间为  16 ms 两者之间的区别便是:有无创建string ret返回字符串..  [updated]版本3:使用字符数组,时间同样是16ms,代码如下:

No.14 Longest Common Prefix

No.14 Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings. 求一组string的最长公共前缀想法:找到最短的那个,然后依次对比 典型的字符串操作,从前向后比较即可 1 #include "stdafx.h" 2 #include <string> 3 #include <vector> 4 #i

leedCode练题——14. Longest Common Prefix

1.题目 14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string "". Example 1: Input: ["flower","flow","flight&qu

LeetCode记录之14——Longest Common Prefix

本题虽然是easy难度,题目也一目了然,问题就是在这里,需要考虑的特殊情况太多,太多限制.导致我一点点排坑,浪费了较多时间. Write a function to find the longest common prefix string amongst an array of strings. 编写一个函数来查找字符串数组中最长的公共前缀字符串. 1 class Solution { 2 public String longestCommonPrefix(String[] strs) { 3

Java [leetcode 14] Longest Common Prefix

小二好久没有更新博客了,真是罪过,最近在看linux的东西导致进度耽搁了,所以今晚睡觉前怒刷一题! 问题描述: Write a function to find the longest common prefix string amongst an array of strings. 解题思路: 该问题就是找到所有数组字符串里面的最长相同前字串.所以我的思路是先找到数组中最短的那个字符串,然后每次比较的时候最多循环该长度就行,这样避免字符串下标溢出的问题.设置StringBuilder对象用于存

[LeetCode][14]Longest Common Prefix解析 两种算法和底层源码的深入对比-Java实现

Q: Write a function to find the longest common prefix string amongst an array of strings. A: 这题的大概意思就是说给你一组字符串找出其中最长的哪个通用的前缀出来.这个东西不难找,但是如何找的又快又好不简单.其实这题本来就是easy题,但是却让我联想到了<数据结构与算法分析>上的一道题目,那道题目是这样的: 给一个8900个字的字典,从中间找出类似abc.bbc.abb这样单词中只有一个字母不同的单词进行