java求两个字符串的最长公共子串

两个输入的字符串最长公共子串

算法:求两个字符串的最长公共子串

原理:

(1) 将连个字符串分别以行列组成一个矩阵。

(2)。若该矩阵的节点对应的字符相同,则该节点值为1。

(3)当前字符相同节点的值 = 左上角(d[i-1, j-1])的值 +1,这样当前节点的值就是最大公用子串的长。

(s2)  b  c    d  e

(s1)

a             0  0    0   0

b             1   0   0   0

c             0    2   0  0

d             0    0   3  0

3. 结果:只需以行号和最大值为条件即可截取最大子串

C# code:

[csharp] view plaincopyprint?

public static string MyLCS(string s1, string s2)

{

if (String.IsNullOrEmpty(s1) || String.IsNullOrEmpty(s2))

{

return null;

}

else if (s1 == s2)

{

return s1;

}

int length = 0;

int end = 0;

int[,] a = new int[s1.Length, s2.Length];

for (int i = 0; i  s1.Length; i++)

{

for (int j = 0; j  s2.Length; j++)

{

int n = (i – 1 = 0  j – 1 = 0) ? a[i – 1, j – 1] : 0;

a[i, j] = s1[i] == s2[j] ? 1+n : 0;

if (a[i, j]  length)

{

length = a[i,j];

end = i;

}

}

}

return s1.Substring(end – length + 1, length);

}

java语言中编程求解两个字符串最长相同字符串的长度

public class StringTest4 {

/**

* @param args

*/

public static void main(String[] args) {

/*

* 需求4:两个字符串的最大相同子串。

* “sadfcctvghjkl”

* “zxcctvcv”

*

* 思路:

* 1,以短的字符串为主。

* 到长的字符串中去判断是否存在,如果存在,已找到。

* 2,如果没有找到。将短的字符串的长度递减获取子串继续到长的串中查找。只要找到就结束。

* 3,没有找到,说明没有相同的。

*

*/

String s1 = “sadfcctvghjkl”;

String s2 = “zxcctvcv”;

String maxSub = getMaxSubString(s2,s1);

System.out.println(“maxsub=”+maxSub+” length=”+maxSub.length());

}

public static String getMaxSubString(String s1, String s2) {

//确定哪个是长的哪个是短的。

String longStr,shortStr;

longStr = s1.length()s2.length()?s1:s2;

shortStr = s1.equals(longStr)?s2:s1;

//System.out.println(“long:”+longStr);

//System.out.println(“short:”+shortStr);

//对短的字符串操作,从短串中取子串,到长字符串中判断,是否存在。

for(int x=0; xshortStr.length(); x++){

for(int y=0,z=shortStr.length()-x; z=shortStr.length(); y++,z++){

//根据y,z,获取子串。

String temp = shortStr.substring(y,z);

//System.out.println(temp);

if(longStr.contains(temp))

return temp;

}

}

return null;

}

}

java求两个字符串的最长公共子串

用JAVA编写一个程序实现,计算两个字符串最长相同子串的长度。

(int

j

=

i;

j

s1.length();

j++)

改为

(int

j

=

i;

j

s1.length()+1;

j++)

因为substring(start,

end)方法中end是不取值的,也就是结尾取end-1,你可以试试两个相同字符串比较会少找一个

2021-02-11:如何求出两个字符串的最大公共子序列长度?

具体函数因语言不同而有差异。

这里说下思路。

1、选择短的那个字符串进行循环枚举子串,这样效率高一些。假定它是 a,长度 k。另一个字符串为 b。

2、两层循环,第一层,子串的起点,循环变量 i=1 到 k-1;第二层,子串起点 i,循环变j= i+1 到 k,作为字串终点。

3、在第二层循环内,对子串i到j用函数查询它在字符串b中的位置,比如 fortran 的 index 函数,若是它的字串,将字串保留到一个副本 t 中,记录字串的长度 s。s 的初值定为0。

4、每找到一共公共子串,将长度与 s 进行比较,大于它的,替换 s,保存字串到 t。

5、完成两层循环后,输出 t 和 s。

java 两个字符串,求最长公共子串的长度

用动态规划,

if (s1[i] == s2[j])

dp[i][j] = dp[i – 1][j – 1] + 1;

else

dp[i][j] = max(dp[i – 1][j], dp[i][j – 1]);

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月27日 23:06:33
下一篇 2024年3月27日 23:16:10

相关推荐

  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4400
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4500
  • java获取字符串指定字符,java获取字符串指定字符的位置

    java如何读取字符串中的某一段字符串 1、在Java中获取字符串中指定的值可以使用以下几种方式:点击学习大厂名师精品课使用substring()方法可以使用String类提供的substring(intbeginIndex,intendIndex)方法,从原始字符串中截取出指定范围的字符子串。 2、第一个参数是开始截取的字符位置。(从0开始)第二个参数是结…

    2024年5月23日
    4200
  • excel数字字符串是什么,excel中数字字符串

    Excel中的数据类型都有什么呢? 1、excel的数据类型包括数值型数据、字符型数据、逻辑型数据、日期型数据。字符型数据:在Excel中,字符型数据包括汉字、英文字母、空格等,每个单元格最多可容纳32000个字符。 2、Excel工作表中的数据有四种类型,分别是文本、数值(含日期时间)、逻辑、出错值。文本类型就是平常所输入的汉字、空格、英文字母。数值型的数…

    2024年5月23日
    3900
  • c语言怎么输入数组,c语言怎么输入数组字符串

    如何用c语言从键盘输入10个数存入数组并求和? 1、用C语言编写一段程序,用来输入10个整数保存到数组中,求出这10个整数的和并输出。 2、,数组是相同数据类型的元素的集合。 2,数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 3,数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。 3、void main(){ fl…

    2024年5月23日
    4000
  • c语言将字符串内字符进行替换,c语言截取字符串中的某一段字符

    C语言中如何替换一个字符串中的字符 打开visual C++ 0-文件-新建-文件-C++ Source File。定义变量:#include stdio.hvoid main(){ char c1,c2,c3; /*定义字符变量*/。 第一步,依次单击visual C ++ 0的“文件”–“新建”–“文件”–“C++ S…

    2024年5月23日
    3800
  • javaexcel列变成数字,java列表转化为字符串

    JAVA导出excel,数字如何去掉小三角?就是变成数字格式 单元格较少时可通过直接设置去掉小三角。选定单元格区域,在其上点鼠标右键——“设置单元格格式”,点“数字”标签——“常规”或“数值”。双击鼠标左键取消倒三角。利用“分列”功能去掉小三角。 应该是单元格变为文本格式。如是数字,而又想要显示前导0,比如00002,则可以设置:工具→选项→错误检查→把“数…

    2024年5月23日
    4500
  • 字符串转化json数组java,java将字符串转换为json对象的方法

    Java中如何将含空格的字符串如何转换成JSON 1、net.sf.json.JSONArray jsonArr = net.sf.json.JSONArray.fromObject(json);这个可以。 2、json_obj= json.loads(str)望采纳。 3、这段代码中,ObjectMapper类是Jackson库中的一个核心类,用于将Jav…

    2024年5月23日
    5500
  • java如何给字符串命名,java中如何给字符串赋值

    java中如何以给定的字符串为名字创建某个类的实例? 1、你就是相用p1来表示一个对象吧。直接生成叫p1的对象是不行的,可以使用变型。 2、当你从某渠道读取对方传递来的字符串,比如{class:A;[a:100;b:200;c:300]},你就要手动去解析这段字符串,来恢复一个A的实例对象。 3、根据 parent 抽象路径名和 child 路径名字符串创建…

    2024年5月23日
    5300
  • c语言输入几个字符串,c语言输入几个字符串怎么表示

    C语言如何一次输入多个字符串,然后再输出 1、首先打开visual studio软件,新建一个C语言文件。接着在C语言文件的顶部导入库内。接着运用scanf函数接收用户输入的字符串。然后我们利用printf函数打印一下用户输入的内容。 2、c语言中有一个标准输入函数,即:scanf函数,它可以读取输入的任意格式类型的数据。scanf函数也有返回值,返回类型为…

    2024年5月23日
    4400

发表回复

登录后才能评论



关注微信