问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

给定两个字符串,求字符串间的最长子字符串

发布网友 发布时间:2022-04-22 13:42

我来回答

4个回答

热心网友 时间:2022-04-22 15:12

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * 
 * 不足:就是如果字符串过长,解析字符串势必花费时间多,比较相同字符串更费时间
 * 漏洞:如果s1是"abcdef",s2是"klbcadekl"时,相同的长字符串为"bc","de",而此程序只输出一个bc而已。自己改进吧
 * 
 * QQgroup: two one seven seven seven one two 欢迎加入交流
 */
public class Test{
 
 public static String checkEq(String s1,String s2){
  String maxEq = "";
  List<String> sub1 = new ArrayList<String>();//用于保存解析s1的所有可分成的子串  
  List<String> sub2 = new ArrayList<String>();//用于保存解析s1的所有可分成的子串 
  List<String> eqList = new ArrayList<String>();//保存相同的子串    
    
  for(int i = 1;i<=s1.length();i++){//解析s1  
   for(int j = 0;j<=s1.length()-i;j++){    
    sub1.add(s1.substring(j,j+i));   
    }  
   } 
  for(int i = 1;i<s2.length();i++){//解析s2
   for(int j = 0;j<=s2.length()-i;j++){    
    sub2.add(s2.substring(j,j+i));   
    }  
   }
  //找到相同的字符串存到eqList中
  for(String s: sub1)   
   if(sub2.contains(s))    
    eqList.add(s);    
  
  
  for (int i = 0; i < eqList.size(); i++) {//找出eqList中最长的
   String str = eqList.get(i);
   if(str.length()>maxEq.length()){
    maxEq = str;
   }
  }
  
  return maxEq;
 }
 
 public static  void main(String[] args){  
  String s1 = "abcdef";  
  String s2 = "klbcdekl"; 
  
  System.out.println(checkEq(s1,s2));
  
  }
}

热心网友 时间:2022-04-22 16:30

public static String LC(String a,String b){
String max = "";
for(int i=0;i<a.length();i++){
for(int j=0;j<a.length()-i;j++){
String tmp = a.substring(i, a.length()-j);
if(b.indexOf(tmp)>=0 && tmp.length()>max.length()){
max = tmp;
}
}
}
return max;
}

 呀,已经有人回答了,而且还是一样的算法...呵呵

我来优化下吧

优化后的算法:

public static String LC(String a, String b) {
String min = b;
String max = a;
if (a.length() < b.length()) {
min = a;
max = b;
}
for (int i = 0; i < min.length(); i++) {
for (int j = 0; j <= i; j++) {
String tmp = min.substring(j, min.length() - i + j);
System.out.println(tmp);
if (max.indexOf(tmp) >= 0) {
return tmp;
}
}
}
return "";
}

 前面算法时间复杂度永远是O(n^2)优化后的算法只有最坏情况是O(n^2)且n是a,b中较小的那个

如果存在不同的等长字符串,会返回最前面的那个比如abcdef和abasdec会返回ab而不会返回de

热心网友 时间:2022-04-22 18:04

public String LC(String a,String b){
int maxLength=0;
String maxString="";
for(int i=0;i<a.length();i++){
for(int j=i+1;j<a.length()+1;j++){
String temp=a.substring(i, j);
int te=b.indexOf(temp);
if(te>-1 && temp.length()>maxLength){
maxLength=temp.length();
maxString=temp;
}
}
}
System.out.println("最长字符串是"+maxString);
return maxString;
}

试试这个代码

热心网友 时间:2022-04-22 19:56

public static String LC(String a, String b) {
String min = b;
String max = a;
if (a.length() < b.length()) {
min = a;
max = b;
}
for (int i = 0; i < min.length(); i++) {
for (int j = 0; j <= i; j++) {
String tmp = min.substring(j, min.length() - i + j);
System.out.println(tmp);
if (max.indexOf(tmp) >= 0) {
return tmp;
}
}
}
return "";
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 买的机票无法选座啊!怎么回事啊!! 开封河滩发现古币市民寻宝,寻到的宝物你会上交国家还是自己藏着?_百 ... 这样的古钱币能值多少钱? 航旅纵横怎么选不了座位 中央鉴宝栏目可有关于古钱币价值的视频吗光绪元宝东三省造 谁会制作古钱币高清视频? 古钱币拍卖视频在哪里找? 古钱币视频鉴定怎么操作? 我新安装了中文手写字体,WORD可以正常使用,QQ聊天却不行? 模拟城市4怎么玩啊? 模拟城市建造怎么玩 模拟城市5怎么玩,我好不容易玩到了小城市就破产了 新手怎么才能玩好模拟城市4 模拟城市游戏怎么玩 关于深度学习 戒指戴在哪支手指各代表什么意思 模拟城市4怎么样玩才能玩好。不破产 每个手指上的戒指各代表什么意思? 华为手机烧屏怎么检测 iQOO怎么检查手机是否烧屏 找两对情侣头像 情迹三部曲全文,作者空梦 要完结的哦··· ...我本身是一个未婚女孩。请问这个是什么意思啊? 《情迹三部曲之二情起》txt全集下载 空梦的情迹三部曲在哪连载的? 求空梦的情迹三部曲加完整番外 情迹三部曲 空梦 求空梦文集情迹三部曲,最好是TXT,还有空梦大人的小说都在哪连载呀,非常感谢!邮箱rendi_20@163.com 如何让自己的电话显示自的公司名 寻一些宠溺BL文:最喜欢重生梗,宠溺,温馨,可以有养成,可以古风,无第三者,文笔好,一定HE的。书 怎么显示公司名,别人打电话时 求空梦的情迹三部曲 尽量完整 邮箱地址:kelering@163.com 类似空梦【情迹三部曲第二部】《潮涌》 和红糖《回家》的好看耽美文!!!!求求求!!! 情迹三部曲 空梦急求 求小说名字或作者 攻好像叫吴钢 受性格温润,很爱老好人*前男友,连带对他的朋友都处处照顾,但前 求耽美小说,最好是攻宠受,从头宠到尾,结局一定要是大圆满哦。 换了理财通怎么登录 群里发信息老显示这样是啥原因 一个红感叹号 QQ群无法分享,分享到好友后是感叹号怎么回事?有办法解决吗? QQ群成员列表中成员昵称为什么显示灰色和感叹号?