最长的共同前缀

我用的方法是,同时保存每个 string 的begin 迭代器,让他们一起移动,然后统一比较,若是不同,或其中有的已经到了 end() ,那么就返回。否则所有的迭代器共同前进一步。

string longestCommonPrefix(vector<string>& strs) {
    if (strs.empty()){
        return string();
    }

    vector<string::iterator> its;
    for_each(strs.begin(), strs.end(), [&](string& s){its.push_back(s.begin());});
    const auto len = its.size();

    for (;;){
        const auto key = *its[0];
        for (size_t i = 0; i != len; ++i){
            if (its[i] == strs[i].end() || *its[i] != key){
                return string(strs[i].begin(), its[i]);
            }
        }
        for_each(its.begin(), its.end(), [](string::iterator& it){++it;});
    }
}
时间: 2024-11-03 07:34:42

最长的共同前缀的相关文章

hdu 4691 最长的共同前缀 后缀数组 +lcp+rmq

http://acm.hdu.edu.cn/showproblem.php? pid=4691 去年夏天,更多的学校的种族称号.当时,没有后缀数组 今天将是,事实上,自己的后缀阵列组合rmq或到,但是,题意理解的一个问题,再折腾了很长时间,,,, 此处简单解释下题目例子吧,希望对读者有帮助  以最后一组数据为例 myxophytamyxopodnabnabbednabbingnabit 6 0 9 9 16 16 19 19 25 25 32 32 37 前两行不解释,题目叙述非常清楚 从第三行

最长的公共前缀

问题 写一个可以返回一组字符串数组公共最长前缀的函数. 思路 公共最长前缀,即字符串数组中公有的前缀部分.我们可以用字符串数组中第一个字符串作为参考和剩下的字符串进行比较. 具体代码 string longestCommonPrefix(vector<string>& strs) { string prefix = ""; if (strs.size() == 0) return prefix; for (int i = 0; i < strs[0].size

寻找最长的共同前缀

给定一个String数组,找到最长的公共字符串 公共字符串,不会比最短的那个元素长:先令result = 第一个元素:后面慢慢判断 1 package com.rust.TestString; 2 3 public class LongestCommonPrefix { 4 public static String longestCommonPrefix(String[] strs) { 5 if (strs.length == 0) { 6 return ""; 7 } 8 Stri

leetcode_最长公共前缀

题目:Write a function to find the longest common prefix string amongst an array of strings. 题解:给出的函数为:char* longestCommonPrefix(char** strs, int strsSize) 其中参数char** strs表示字符串数字,int strsSize表示有多少个字符串 题目的要求就是在这strsSize个字符串中找出最长的公共前缀,例如strsSize=3,字符串如下图时

【LeetCode-面试算法经典-Java实现】【014-Longest Common Prefix(最长公共前缀)】

[014-Longest Common Prefix(最长公共前缀)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Write a function to find the longest common prefix string amongst an array of strings. 题目大意 写一个函数找出一个字串所数组中的最长的公共前缀. 解题思路 第一步先找出长度最小的字符串,然后将这个字符串与其它的字符串相比找出最短的最公共前缀. 代码实现 publi

LeetCode 7最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 说明: 所有输入只包含小写字母 a-

【LeetCode-字符串】最长公共前缀

题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 输入: ["flower","flow","flight"] 输出: "fl" 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀. 题目链接: https://leetcode

POJ 1226后缀数组:求出现或反转后出现在每个字符串中的最长子串

思路:这题是论文里的最后一道练习题了,不过最后一题竟然挺水的. 因为求的是未反转或者反转后,最长公共子串. 刚开始还真不知道怎么构建连接成一个字符串,因为需要有反转嘛! 但是其实挺简单的,把未反转的和反转后的字符串都连起来,中间用未出现过的字符隔开就行了!然后未反转的和反转的在同一组. 二分枚举最长的公共前缀长度,然后统计看看这个最长的长度在不在所有的组里,如果在就符合-- #include<iostream> #include<cstdio> #include<cstrin

POJ 3294 后缀数组:求不小于k个字符串中的最长子串

思路:先把所有的串连接成一个串,串写串之前用没出现过的字符隔开,然后求后缀:对height数组分组二分求得最长的公共前缀,公共前缀所在的串一定要是不同的,不然就不是所有串的公共前缀了,然后记下下标和长度即可. 刚开始理解错题意,然后不知道怎么写,然后看别人题解也不知道怎么意思,后面看了好久才知道题目意思理解错了. 时间四千多ms,别人才一百多ms,不知道别人怎么做的-- #include<iostream> #include<cstdio> #include<cstring&