「java求最长公共子串」最大子串和 java

博主:adminadmin 2022-11-23 22:06:08 50

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

本文目录一览:

java 实现 一个字符串中不重复最长子串

这个函数的目的是求最长不重复子串,所谓不重复子串是指由某个字符串中相邻的N个字符组成,这个N内所有字符都是不重复的,最长是指这个N最大。如字符串"abcdefghiud",最长的不重复的子串为"abcdefghiu"

cursor里面存放字符的在字符串中的位置

lengAt[i]存放以字符string.charAt(i)结尾的最长子字符串的长度

max的目的就是确定这个最长,因为最开始可能找到的子串比以后找到的子串短,所以用max比较

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怎么写求最长的公共子序列

/*目标:输出两个字符串的所有公共最长子序列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 两个字符串,求最长公共子串的长度

用动态规划,

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求最大公共子串

二楼改的

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代码:

public class CommonSubString {

public String search(String s1,String s2)

{

String max = "";

for(int i=0; is1.length(); i++)

{

for(int j=i; js1.length(); j++)

{

String sub = s1.substring(i,j);

if((s2.indexOf(sub)!=-1)sub.length()max.length())

{

max = sub;

}

}

}

return max;

}

public static void main(String[] args)

{

String s1 = "abcdefghigj";

String s2 = "xyzabcdefigj";

String output = new CommonSubString().search(s1,s2);

System.out.println(output);

}

}

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

The End

发布于:2022-11-23,除非注明,否则均为首码项目网原创文章,转载请注明出处。