最大公共子数组java(最长公共子串 后缀数组)

今天给各位分享最大公共子数组java的知识,其中也会对最长公共子串 后缀数组进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、java怎么写求最长的公共子序列2、java数组越界问题,求高人指点,问了好多人问题都没得到解决,希望能有高手指点迷津3、java 两个字符串,求最长公共子串的长度4、数据结构问题 求大神 java语言描述5、java求最大公共子串

java怎么写求最长的公共子序列

/*目标:输出两个字符串的所有公共最长子序列date:09-11-26BY:zggxjxcgx算法:判断较短串是否为较长串的子序列,如果是则得到结果;否则,对较短串进行逐个字符删除操作(将字符替换为’#’表示删除)。删除操作用递归函数进行实现。每层递归删除一个字符,若删除一个字符后未得到匹配子序列,则还原该字符所在位置。第n层递归未找到匹配子序列,则将递归层数加1,重复删除直到剩下空串。*/#include#includeintdep=0;/*较短串的长度*/intdepflag=0;/*下一步要探测的深度*/intlastflag=0;/*是否找到匹配子序列,1为找到*/intcount=0;/*目标结果的个数*/intmystrcmp(char*s1,char*s2)/*判断s2是否为s1的子串*/{while(*s1*s2)if(*s2==’#’)s2++;elseif(*s2==*s1){s1++;s2++;}elses1++;while(*s2==’#’)s2++;if(*s2==’\0′)return1;return0;}voidpristr(char*str)/*打印最长子序列*/{if(0==count++)printf(“\n公共最长子序列:\n”);printf(“%2d:”,count);while(*str){if(*str!=’#’)printf(“%c”,*str);str++;}printf(“\n”);}/*递归函数求最长子序列。start控制下一个要检测的字符,deptemp控制递归的深度,first为’s’表示第一层递归*/intfun(char*str1,char*str2,char*start,intdeptemp,charfirst){inti=0,j=0;char*s,cback;do{s=start;if(‘s’==first)deptemp=depflag;/*在第一层设置递归深度*/while(*s){if(*s==’#’){s++;continue;}cback=*s;*s=’#’;/*删除当前字符*/if(mystrcmp(str1,str2)){pristr(str2);lastflag=1;}/*找到匹配,将lastflag设为1,在完成深度为deptemp+1的探测(找到所有匹配)后退出递归*/elseif(deptemp0)fun(str1,str2,s+1,deptemp-1,’n’);/*深度探测,s+1表示从下一个位置开始删除*/*s=cback;s++;/*还原该位置的字符,以便下次进行探测*/}if(‘s’==first)++depflag;/*删除depflag+1个字符还未找到,则递归深度加1*/}while(depflagstrlen(st2))s1=st1,s2=st2;/*将s1设为较长的串*/elses1=st2,s2=st1;printf(“\nstr1:%s\nstr2:%s\n”,s1,s2);dep=strlen(s2);/*得到较短串的长度*/if(mystrcmp(s1,s2))pristr(s2);elseif(0==fun(s1,s2,s2,0,’s’))printf(“\n没有公共元素!\n”);//printf(“%d\n”,mystrcmp(“afdebjewcwedw”,”abcdw#”));}

最大公共子数组java(最长公共子串 后缀数组)

java数组越界问题,求高人指点,问了好多人问题都没得到解决,希望能有高手指点迷津

String st = sc.next();

这句话得到的st并不是你需要的jla hhhhh.而是jla

因为Scanner调用.next方法获取的到空格就终止了.所以st.split(” “)得到的只是一个数组长度为1的数组而已.

然后c = compare(s[i][0],s[i][1]),当然就报数组下标越界了.以为没有s[i][1].

多用System.out.println(),在关键地方打印信息.比如数组长度,数组元素内容等等.

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]);

数据结构问题 求大神 java语言描述

这不是很容易吗?。。。。

不过我也忘了我写的算不算java还是C#,将就看吧,反正都是差不多。

大概类似:

Listint你当是一个int的数组好了。一下子忘了怎么写,懒得查。

int f(Listint A,ListintB)

{

int i=0,int k=0;

Dictoryint, object sub_collection=new Dictionaryint,object() ;//这个是一个字典类,主要是用于存放数组A,B的公有子集数据。用Dictionaryint,object类主要是为了保证唯一的key。保证里面的元素不重复。

for (i=0;iA.Length;i++)

{

for(k=0;kB.Length;k++)

{

if (A[i]==B[k])

{

//找到A,B的共有元素。

if (!sub_collection.ContainsKey(A[i]))

{

//如果子集不包含当前找到的A,B公共元素,则添加到该子集里面

sub_collection.Add(A[i],null); //该Sub_Collection主要是为了快速查询某个元素(键值)是否已经重复,至于value部分的取值无所谓,直接取null)

}

else

{

//说明当前A,B共有的元素已经重复了,什么都不用做。

}

}

}

}//end for

return sub_collection.Count;

}

java求最大公共子串

二楼改的

c = b.substring(i,j-1);

之后下标越界没了。

程序无法出结果,中间有死循环。当while语句执行完之后j是a.length();然后是执行内循环for语句for(j=b.length()-1;j0;j–) 此时只比较J0;。。。。好像是个死循环。最内层的循环可以在加一个int k来控制。多次运行导致cpu上升至100%的。

提供一种矩阵算法,这是LCS的一种算法:

public class stringCompare {

/**求最长匹配子字符串算法

str数组记录每行生成的最大值strmax

max数组记录str数组最大时所处的列号nummaxj

最大子字符串为substring(nummax-strmax+1,strmax+1)

*/

public static void main(String[] args) {

String s1=”asdfgxxcvasdfgc”;

String s2=”asdfxxcv”;

int m=s1.length();

int n=s2.length();

int k=0;

int nummax=0;

int []str=new int[m];

int []max=new int[m];

int []num=new int[m];

for(int i=0;im;i++) //生成矩阵数组

for(int j=n-1;j=0;j–)

{

if(s1.charAt(i)==s2.charAt(j))

if(i==0||j==0)

{

num[j]=1;

max[i]=j;

str[i]=1;

}

else

{

num[j]=num[j-1]+1;

if(max[i]num[j])

{

max[i]=j;

str[i]=num[j];

}

}

else

num[j]=0;

}

for(k=0;km;k++) //求str数组的最大值

{

if(nummaxstr[k])

{

nummax=str[k];

}

}

for(k=0;km;k++)

if(nummax==str[k])

System.out.println(s2.substring(max[k]-str[k]+1,max[k]+1));

}

}

最大公共子数组java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于最长公共子串 后缀数组、最大公共子数组java的信息别忘了在本站进行查找喔。

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

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

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月3日 20:43:46
下一篇 2024年4月3日 20:49:55

相关推荐

  • c语言自定义函数数组求和,c语言自定义函数调用数组

    C语言数组怎样求和, 可以通过循环遍历数组中的每个元素,并进行累加。累加的结果可以保存在变量中,需要注意,要保证变量足够保存累加结果,不会出现溢出。 先获取数组长度,然后用for循环,从数组中获取值进行累加求和。 c语言中,定义数组后可以用sizeof命令获得数组的长度(即可容纳元素个数)。但是通过传递数组名参数到子函数中,以获得数组长度是不可行的,因为在子…

    2024年5月23日
    4400
  • java对数组计算,java数组计算时间复杂度

    Java中数组运算 1、很简单,因为你的数组是局部变量,只在那个声明它的方法里能用,解决办法是: 把它设置为属性; 作为方法的返回值。 2、将它们相加,并将结果存储到result数组中相应的位置。- 最后返回result数组即可。需要注意的是,上面的代码中我们使用了三元运算符 ? : 来判断数组的下标是否越界,如果越界则将值设为0。 3、public sta…

    2024年5月23日
    5000
  • c语言输入数组,C语言输入数组的方法

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

    2024年5月23日
    5100
  • java二维数组获得数据,java二维数组用法

    java中怎样用一位数组获得二维数组中某一行的值 利用 for循环遍历数组 即可 for循环是开界的。 Number : Name : A : B : Value;通过读取指定的列名,你可以得到,列名在数组中对应的索引值。 其实多维数组是在一维数组的基础上进行变换的,就拿二维数组来说,它是在一维数组上存储一维数组。 得到一维数组的长度lenth,如果长度为8…

    2024年5月23日
    4300
  • c语言输入参数数组的长度,c语言 数组参数

    C语言中关于数组长度 1、c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)。 2、因为数组中每个元素的类型都是一样的,在内存中所占的字节数都是相同的,所以总的字节数除以一个元素所占的字节数就是数组的长度。 3、C语言数组的长度是预先定义好的,在整个程序中固定不变。操作方法如下:首先,点击进人visual studio,然后新建一个c…

    2024年5月23日
    4700
  • c语言二维数组的指针,c语言二维数组的指针是什么

    C语言中“二维数组行指针”是什么意思 在C语言中,可以通过定义一个行数组指针,使得这个指针与二维数组名具有同样的性质,实现它们之间可以直接赋值。 数组名就是一个指针常量,它代表数组元素在内存相关信息。C语言 是一门通用计算机编程语言,应用广泛。 a即是它的行指针,a+0表示第0行的地址,a+1表示第1行地址…a[row]+col即列指针,列指针经过一次解引用…

    2024年5月23日
    4800
  • java数组增加元素,java 数组 添加元素

    java数组如何循环添加元素 在List中添加元素主要有以下几种方法:点击学习大厂名师精品课add(Objectobj):在列表的末尾添加元素obj。add(intindex,Objectobj):在指定下标index处添加元素obj。 一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。 数组长度固定,插入以后原来的最后一个元素就被挤…

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

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

    2024年5月23日
    4000
  • c语言数组联系,c语言数组的问题

    C语言字符数组连接问题 1、str1和str2都是99个字节,如果str1内字符串的长度比较大,连接str2就会出现超出str1长度的可能,也就是溢出。可以把str1的长度定义大一些。 2、C语言中,字符类型char和整数类型在存储数据的格式上是相同的,都是采用补码存储数据。所不同的是,char只有一个字节,而int数据有四个字节。 3、实际上就是实现str…

    2024年5月23日
    4100
  • java将数据分类存进二维数组,java将二维数组保存在文件

    java怎么从mysql查询出来的结果转化为二维数组,举个例子 把你二维数组中的所有数据拼接起来,用“,”连接,组成一个长的字符串,存入数据库。进行其他操作时,可先将该字符串解析,原理和普通的字符串是一样的。 –这儿存在两种情况:字符串不存在分隔符号 字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔…

    2024年5月23日
    4200

发表回复

登录后才能评论



关注微信