LeetCode 14 Longest Common Prefix(最长公共前缀)

翻译

写一个函数(或方法)来寻找一个字符串数组中的最长公共前缀。

原文

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

释义

"abcdefg"
"abcdefghijk"
"abcdfghijk"
"abcef"

上面的字符串数组的最长公共前缀就是"abc"。

思考

如下图所示,第一步就是要找出该字符串数组中的最短字符串的长度及其序列。

第二步,用for循环从第一个字符串到最后一个字符串依次做比较,具体步骤如下:

  • 外层for循环中用i表示字符串长度,从minSize一直可以递减到0
  • 初始result即为最短字符串(通过minIndex确定)的前i个字符
  • 内层for循环中用j表示字符串数组中的索引,依次递增。j等于minIndex时不做操作(因为为同一个字符串不必比较)
  • 否则通过临时字符串temp来获取索引为j的字符的前i个字符
  • 需要所有的temp都与result相等
  • 如果j和len相等了,说明已经遍历完所有的字符串
  • 每次判断的字符串长度缩减之后都更新result

代码

public class Solution {
    public string LongestCommonPrefix(string[] strs) {
        int len = strs.Length;

        if(len == 0)
            return "";

        string result = "";
        int minSize = 100000;
        int minIndex = 0;

        if(len == 1){
            result = strs[0];
            return result;
        }

        for(int i = 0; i < len; i++){
            int size = strs[i].Length;
            if(size < minSize){
                minSize = size;
                minIndex = i;
            }
        }

        for(int i = minSize; i >= 0; i--){
            result = strs[minIndex].Substring(0,i);

            int j = 0;
            for(; j < len; j++){
                if(j == minIndex)
                    continue;
                string temp = strs[j].Substring(0,i);
                if(result != temp)
                    break;
            }
            if(j == len)
                return result;
        }
        return result;
    }
}
时间: 2024-10-31 06:20:36

LeetCode 14 Longest Common Prefix(最长公共前缀)的相关文章

[LeetCode]--14. Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings. public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) return ""; String prefix = strs[0]; for (int i = 1; i < strs.lengt

Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings. (每个字符串从0开始的公共部分即最长公共前缀) C++代码如下: #include<iostream> #include<string> #include<vector> using namespace std; class Solution { public: string longestComm

java实现求两个字符串最长公共子串的方法_java

本文实例讲述了java实现求两个字符串最长公共子串的方法.分享给大家供大家参考,具体如下: 这个是华为OJ上的一道题目.首先,如果我们用java写代码,华为OJ有以下三条规则需遵守,否则编译无法通过或者用例无法通过,规则如下: (1)一定不可以有包名: (2)主类名只能为Main: (3)不可以输出与结果无关的信息. 好了,按照以上规则,我们写出来的代码如下(此代码不是最优的,只是用来记录华为OJ上java代码的书写规则): import java.util.Scanner; public cl

UVa 10405:Longest Common Subsequence,最长公共子序列模板题

[链接] http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=1346 [原题] Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, print the length of

LCS (Longest Common Subsequence) 字符串最长公共子串算法

LCS (Longest Common Subsequence) 算法用于找出两个字符串最长公共子串. 算法原理: (1) 将两个字符串分别以行和列组成矩阵.(2) 计算每个节点行列字符是否相同,如相同则为 1.(3) 通过找出值为 1 的最长对角线即可得到最长公共子串. 人 民 共 和 时 代中 0, 0, 0, 0, 0, 0华 0, 0, 0, 0, 0, 0人 1, 0, 0, 0, 0, 0民 0, 1, 0, 0, 0, 0共 0, 0, 1, 0, 0, 0和 0, 0, 0, 1

leetcode 5 Longest Palindromic Substring--最长回文字符串

问题描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的.比如"a" , "aaabbaaa" 之前

[LeetCode] Number of Longest Increasing Subsequence 最长递增序列的个数

Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: Input: [1,3,5,4,7] Output: 2 Explanation: The two longest increasing subsequence are [1, 3, 4, 7] and [1, 3, 5, 7]. Example 2: Input: [2,2,2,2,2] Outpu

python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)

问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 belong cnblogs 输出示例 blog 分析 既然打算套用回溯法子集树模板,那就要祭出元素-状态空间分析大法. 以长度较小的字符串中的字符作为元素,以长度较大的字符串中的字符作为状态空间,对每一个元素,遍历它的状态空间,其它的事情交给剪枝函数!!! 解x的长度不固定,xi表示字符串b中的序号. 在处理每一个元素时,如果没有一个状态被选择(cnb

动态规划之最长公共子序列

给定两个序列x和y,称z是x和y的公共子序列,如果z既是x的子序列,又是y的子序列:最长的公共子序列称作最长公共子序列LCS(longest common subsequence). 解题思路 (1)LCS的最优子结构 设zk是xm和yn的一个LCS,则,如果x和y的最后一个元素相同,则z中去掉最后一个元素之后zk-1仍为xm-1和yn-1的LCS. 如果xm!=yn,若zk!=xm,则z是xm-1和y的一个LCS,若zk!=yn,则z是xm和yn-1的LCS. (2)一个递归解 设c[i][j