寻找最长的共同前缀

给定一个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         String result = strs[0];
 9         if (result.length() == 0 ) {
10             return "";
11         }
12         for (int i = 0; i < strs.length; i++) {
13             if (strs[i].length() == 0) {
14                 return "";
15             }
16             int preLen = result.length() > strs[i].length() ?strs[i].length() : result.length() ;
17             int j;
18             for (j = 0; j < preLen; j++) {
19                 if (result.charAt(j) != strs[i].charAt(j)) {
20                     break;
21                 }
22             }
23             result = result.substring(0, j);
24         }
25         return result;
26     }
27     public static void main(String args[]){
28         String[] input = {"abcdefghiaaaa","abcdefghiadfa","abcdefghifaf"};
29         String[] input1 = {""};
30         System.out.println(longestCommonPrefix(input));
31         System.out.println(longestCommonPrefix(input1));
32     }
33 }
时间: 2024-09-29 17:39:42

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

寻找最长递增数字子串_Java实现

有一个字符串,其中包含了多个数字子串,要求求出最长的递增数字子串,比如s='df1112wg222235hhh25678902344a666666666666666666666666666666666666sd'中最长递增数字子串是666666666666666666666666666666666666. package com.mzsx.binarySearch; import java.util.ArrayList; import java.util.List; import java.ut

【经典算法】寻找最长01字串(转自待字闺中)

这两天在微信公众号“待字闺中”中看到一个经典的面试算法,寻找最长01字串,原题目是这么说的: 给定一个数组,数组中只包含0和1.请找到一个最长的子序列,其中0和1的数量是相同的. 例1:10101010 结果就是其本身.例2:1101000 结果是110100 这个题目,看起来比较简单,一些同学可能认为题目的描述符合动态规划的特征,然后就开始用动态规划解,努力找状态转移方程.这些同学的感觉,是很正确的.但,找状态转移方程,我们要对原来的数组进行变换一下. 原来是0和1的串,我们将0都换为-1.这

矩形网格中寻找最长递增序列

在矩形网格中寻找最长的递增序列 比如如下网格 97,47,56,36 35,57,41,13 89,36,98,75 25,45,26,17 结果要求输出 17, 26, 36, 41, 47, 56, 57, 97 基本想法就是对图中的每一个点都当作起始点试一编 将序列最长的保存起来 最后输出 代码如下 使用java编写 import java.util.ArrayList; public class 最长递增序列 { static int[][] rect={ {97,47,56,36},

使用后缀数组寻找最长公共子字符串JavaScript版

后缀数组很久很久以前就出现了,具体的概念读者自行搜索,小菜仅略知一二,不便讨论. 本文通过寻找两个字符串的最长公共子字符串,演示了后缀数组的经典应用. 首先需要说明,小菜实现的这个后缀数组算法,并非标准,只是借鉴了其中的思想. 小菜实现的算法,有两个版本,第一个是空间换时间,第二个是时间换空间. 空间换时间版本 1 /* 2 利用后缀数组获取两个字符串最长公共子字符串 3 空间换时间版本 4 @params 5 s1 String,要分析的字符串 6 s2 String,要分析的字符串 7 no

[Jobdu] 题目1337:寻找最长合法括号序列

题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的左括号匹配.例如:((()))()()便是一个长度为10的合法括号序列,而(()))( 则不是. 需要你求解的是,找出最长的合法括号子序列的长度,同时找出具有这样长度的序列个数. 输入: 测试数据包括多个,每个测试数据包含两行: 第一行为一个整数N,其中N不会超过10^6. 第二行为一个长度为N的字

如何寻找最长回文子串

回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么. 首先,明确一下什:回文串就是正着读和反着读都一样的字符串. 比如说字符串 aba 和 abba 都是回文串,因为它们对称,反过来还是和本身一样.反之,字符串 abac 就不是回文串. 可以看到回文串的的长度可能是奇数,也可能是偶数,这就添加了回文串问题的难度,解决该类问题的核心是双指针.下面就通过一道最长回文子串的问题来具体理解一下回文串问题: string longestPalindrome(stri

[LeetCode]3. Longest Substring Without Repeating Characters寻找最长无重复字符的子串

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest subst

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 前两行不解释,题目叙述非常清楚 从第三行

寻找最长公共子串的问题

问题:现在有两个字符串,我们要寻找它们最长的公共子串.比如regression和express这两个字符串,它们的子串有e和ress,那么它们的最长公共字串就是ress. 解法: 我们利用一个二维数组来记录两个字符串相互匹配的情况,如果字符串str1长度为len1,字符串str2长度为len2,那么数组可以设为table[len1][len2]. 对于数组中的每个元素table[i][j],当字符串对应位置的值一致时(str1[i] == str2[j])为1,不一致时为0.当全部对比完成之后,