设为首页 加入收藏

TOP

Java求两个字符串的最长公共子串
2015-02-02 14:38:20 来源: 作者: 【 】 浏览:16
Tags:Java 两个 字符串 最长 公共

Java求两个字符串的最长公共子串,这个是华为OJ上的一道题目。首先,如果我们用java写代码,华为OJ有以下三条规则需遵守,否则编译无法通过或者用例无法通过,规则如下:


(1)一定不可以有包名;


(2)主类名只能为Main;


(3)不可以输出与结果无关的信息。


  好了,按照以上规则,我们写出来的代码如下(此代码不是最优的,只是用来记录华为OJ上java代码的书写规则):


import java.util.Scanner;


public class Main {
? ? public static void main(String[] args) {
? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? Main mainObj = new Main();
? ? ? ? int len = mainObj.getCommonStrLength(sc.next(),sc.next());
? ? ? ? System.out.println(len);
? ? }
? ?
? ? int getCommonStrLength(String str1, String str2) {
? ? ? ? ? ? str1 = str1.toLowerCase();?
? ? ? ? ? ? str2 = str2.toLowerCase();?
? ? ? ? ? ? int len1 = str1.length();?
? ? ? ? ? ? int len2 = str2.length();?
? ? ? ? ? ? String min = null;?
? ? ? ? ? ? String max = null;?
? ? ? ? ? ? String target = null;
? ? ? ? ? ? min = len1 <= len2 ? str1 : str2;
? ? ? ? ? ? max = len1 >? len2 ? str1 : str2;
? ? ? ? ? ? //最外层:min子串的长度,从最大长度开始
? ? ? ? ? ? for (int i = min.length(); i >= 1; i--) {
? ? ? ? ? ? ? ? //遍历长度为i的min子串,从0开始
? ? ? ? ? ? ? ? for (int j = 0; j <= min.length() - i; j++) {?
? ? ? ? ? ? ? ? ? ? target = min.substring(j, j + i);?
? ? ? ? ? ? ? ? ? ? //遍历长度为i的max子串,判断是否与target子串相同,从0开始
? ? ? ? ? ? ? ? ? ? for (int k = 0; k <= max.length() - i; k++) {?
? ? ? ? ? ? ? ? ? ? ? ? if (max.substring(k,k + i).equals(target)) {?
? ? ? ? ? ? ? ? ? ? ? ? ? ? return i;?
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }?
? ? ? ? ? ? return 0;?
? ? }
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JSON编码格式提交表单数据详解 下一篇Java数组不能通过toString方法转..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: