您的位置:首页 > 编程语言 > Java开发

华为OJ——查找两个字符串a,b中的最长公共子串

2016-08-22 16:12 190 查看


题目描述

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 

输入描述:
输入两个字符串

输出描述:
返回重复出现的字符

输入例子:
abcdefghijklmnop
abcsafjklmnopqrstuvw

输出例子:
jklmnop


方法一:

import java.util.*;
public class Main{
public static void main(String[] args) {

Scanner scan=new Scanner(System.in);
while(scan.hasNext())
{
String str1=scan.nextLine();
String str2=scan.nextLine();
int maxLength=0;//记录最长共同字符串的长度
String maxStr="";//记录最长共同字符串
//默认第一个字符串为短字符串,如果第二个更短,则交换两个字符串的位置,把第一个变成短的,第二个变成长的
if(str1.length()>str2.length()){
String temp=str2;
str2=str1;
str1=temp;
}
//从最长长度开始,依次递减查看有没有共同的
for(int i=0;i<str1.length()-1;i++){
String str=Give(str1.substring(i),str2);
if(str.length()>maxLength && str!="a"){
maxStr=str;
maxLength=str.length();
}
}
System.out.println(maxStr);
}
}
//输入两个字符串,返回最长的公共部分
static String Give(String str1,String str2)
{
String subStr="";
for(int j=str1.length()-1;j>0;j--){
subStr=str1.substring(0,j+1);
if(str2.contains(subStr)){
return subStr;
}
}
return "";
}
}方法二:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String s1 = in.nextLine();
String s2 = in.nextLine();
String max = s1.length() >= s2.length()?s1:s2;
String min = s1.length() >= s2.length()?s2:s1;
int l = 0;
String s ="";
for(int i=0;i<min.length();i++){
for(int j=i+1;j<=min.length();j++){
if(max.contains(min.substring(i,j)) && j-i>l){
l=j-i;
s=min.substring(i,j);
}
}
}
System.out.println(s);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java笔试题