java实现求两个字符串最长公共子串的方法_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;
 }
}

希望本文所述对大家Java程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 字符串
, 最长
公共子串
最长公共子字符串、字符串最长公共前缀、最长公共字符串、kmp求最长公共字符串、实现最长公共子序列,以便于您获取更多的相关知识。

时间: 2024-09-15 12:04:38

java实现求两个字符串最长公共子串的方法_java的相关文章

JavaScript自定义函数实现查找两个字符串最长公共子串的方法_javascript技巧

本文实例讲述了JavaScript自定义函数实现查找两个字符串最长公共子串的方法.分享给大家供大家参考,具体如下: //查找两个字符串的最长公共子串 function findSubStr(s1,s2){ var S=sstr= "" ,L1=s1.length,L2=s2.length; if (L1>L2){ var s3=s1;s1=s2,s2=s3,L1=s2.length;} for ( var j=L1;j> 0 ;j--) for ( var i= 0 ;i&

LCS (Longest Common Subsequence) 字符串最长公共子串算法

LCS (Longest Common Subsequence) 算法用于找出两个字符串最长公共子串. 算法原理: (1) 将两个字符串分别以行和列组成矩阵.(2) 计算每个节点行列字符是否相同,如相同则为 1.(3) 通过找出值为 1 的最长对角线即可得到最长公共子串. 人 民 共 和 时 代中 0, 0, 0, 0, 0, 0华 0, 0, 0, 0, 0, 0人 1, 0, 0, 0, 0, 0民 0, 1, 0, 0, 0, 0共 0, 0, 1, 0, 0, 0和 0, 0, 0, 1

JAVA求两直线交点和三角形内外心的方法_java

一.求两直线交点 复制代码 代码如下: class Point {    double x;    double y;     public Point() {        this.x = 0;        this.y = 0;    }}class Line {    Point a;    Point b;     public Line() {        this.a = new Point();        this.b = new Point();    }    //求

java实现字符串匹配求两个字符串的最大公共子串_java

本文实例讲述了java实现求两个字符串最大公共子串的方法.分享给大家供大家参考,具体如下: 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结了这篇博客内容:求两个字符串的最大公共子串. 算法思想:基于图计算两字符串的公共子串.具体算法思想参照下图: 输入字符串S1:achmacmh    输入字符串S2:macham 第a步,是将字符串s1,s2分别按字节拆分,构成一个二维数组: 二维数组中的值如b所示,比如第一行第一列的值表示字符串s2和s1的第一个字节是否相等,若相等就是1

C语言求两个字符串的最长公共子串_C 语言

本文实例讲述了C语言求两个字符串的最长公共子串的方法.分享给大家供大家参考.具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * str3); int stringLength(char * str); void main(){ char str1[50]; char st

JAVA中获取两个字符串差异的方法

问题描述 JAVA中获取两个字符串差异的方法 求助,在编程的过程中碰到这样一个问题,有两个String字符串,然后我需要获取他们之间的差异 String s = {"12345"}; String s1 ={"123645"}; 其中这两个数组的长度可变,s是模板,所有的数组都要和这个数组比较,然后把差异的部分获取出来 所以s1可以是缺了一两个元素的数组,仅仅是单个的字符被替换了,这个可以简单的用字符数组一个一个比较获得,但是如果多一个,或者少一个,这一块我就有点不

【字符串处理算法】获取最长公共子串的算法设计及C代码实现

一.需求描述 输入两个字符串,编写程序获取这两个字符串的第一个最长公共子串. 例如,输入的字符串为"abcdef"和"fecdba",那么这两个字符串的第一个最长公共子串为"cd".   二.算法设计 我们可以首先寻找两个字符串中的第一个相等的字符,然后分别向后移动来比较对应位置的字符是否相等. 即如果字符串1为"1234abcd",字符串2为"abd",那么首先发现字符串1中的第五个字符"a&q

支配点递推关系-求教下字符串最长公共子序列中支配点算法中几点问题。

问题描述 求教下字符串最长公共子序列中支配点算法中几点问题. 求支配点之间的递推关系 资料地址:http://www.doc88.com/p-140662466336.html

最长公共子串-poj-2274-undone

Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 20935 Accepted: 8622 Case Time Limit: 1000MS Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his