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

题目描述

查找两个字符串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;imaxLength && 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;il){
                        l=j-i;
                        s=min.substring(i,j);
                    }
                }
            }
            System.out.println(s);
        }
    }
}






你可能感兴趣的:(#,华为OJ系列,#,Java笔试题汇总(华为OJ))