zoukankan      html  css  js  c++  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;  
        }
    }
  • 相关阅读:
    redis 1 简单介绍和存储的数据结构
    mysql 14 覆盖索引+回表
    mysql 13 B+tree中存储数据的格式 页
    java Arrays.asList() 数组转集合
    java 迭代器
    mysql 12 SQL优化策略
    mysql 11 执行计划
    mysql 10 索引面试题分享
    搭建一个开源项目2-打造另一个环境以及解决上期问题
    搭建一个开源项目1-如何搭建Linux虚拟机
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3967231.html
Copyright © 2011-2022 走看看