有两字符串s1,s2,编写一段程序寻找它们的最大公共字符串,返回最大公共字符串的字符个数。 作业题吧。跟“所属社区: Java J2SE / 基础类”好像也没有什么关系吧。哈哈,路过。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /* 习题二 第16小题求两个字符串中所有的共同的子字符串*/import hua.Xuw;public class Ex0216{ public static boolean content(String str1,String str2)//str2是否为str1的子字符串 { for(int i=0;i<=str1.length()-str2.length();i++) if((str1.substring(i,i+str2.length())).equals(str2)) return true; return false; } public static void main(String args[]) { String str1,str2,tmp=""; boolean flag,flag1; int temp,len=0; Xuw x=new Xuw(System.in); System.out.println("Input the first string:"); str1=x.getString(); System.out.println("Input the second string:"); str2=x.getString(); System.out.println("\nthe first string is: "+str1); System.out.println("the second string is: "+str2); String out[]=new String[str1.length()]; len=0; for(int i=0;i<str1.length();i++) { temp=i; for(int j=0;j<str2.length();j++) { flag1=true; flag=false; for(int k=j;temp<str1.length()&&k<str2.length()&&(str1.charAt(temp)==str2.charAt(k));k++) { flag=true; temp++; tmp=str2.substring(j,k+1); } if(flag) { for(int h=0;h<len;h++) { if(content(out[h],tmp)) { flag1=false; break; } if(content(tmp,out[h])) { out[h]=tmp; for(int m=h+1;m<len;m++) if(content(tmp,out[m])) { for(int n=m+1;n>len;n++) out[n-1]=out[n]; } flag1=false; break; } } if(flag1) { out[len]=tmp; len++; } } } } if(out[0]==null) System.out.println("There is none mutual substring!"); else { System.out.println("The mutual substrings are:"); for(int i=0;i<len;i++) System.out.println(out[i]); } }}这是求出所有的共有字符串 ,最大的就在里边了 这是很久以前写的了 可能有些不严整的地方 自己改进 晕死啊这不是wicresoft的笔试题么其实很简单的你总知道KMP吧(8要说8知道,KMP去年微创就考过了)KMP8是传3个参么,最后一个参8是搜索起始位置么传回的8是子串的首字符位置么那么一个while不等于-1就可以了亚其实就是KMP,next和主函数一模一样写效率是O(m+n)优化不能其实最好的办法就是java的indexOf+while阿呵呵,100%8会错,不过就是没有那个快而已也可以写java的next函数,8过估计N麻烦,特别是以java这种繁琐的语法而言我写的到处是箭头,ft,因为居然给出了调用代码。。ft,蛮好不写的(仔细想过,似乎while里面必须要+1不能+s2的长度的说。) 这个自己写有何难,自己不会设计算法怎么做程序员。不想做程序员,上CSDN有多大意义 第一题更简单,8过我居然用bubble(寒-_-!)因为看到sql题目巨简单啊哈哈。。8过居然还是写错了sql唉弱项就是弱项阿~~~一个when写到子搜索里面去了召唤大人给出sql bobxie(bobxie):结贴太快了。虽然结了贴子,我还是想贴一下,不然我不是吹牛了。import javax.swing.*;public class str_str { public static void main(String[] args){ String str1=JOptionPane.showInputDialog("please input the first number:"); //第一个字符串 String str2=JOptionPane.showInputDialog("please input the second number:"); //第二个字符串 if(str1.length()<str2.length()){ String str3; str3=str1; str1=str2; str2=str3; }//使str1总不会比str2短 int len1=str1.length(); //第一个字符串的长度 int len2=str2.length(); //第一个字符串的长度 int max=0; //二个字符串中相等且最长的子串的长度 int count=0; //记录在某一次查询中有多少个连续的字符相等 int tgc=0; //记录符合要求的字符串的个数 String[] tg=new String[len1*len2]; //为可能符合的字符串开辟空间以便存储 //以下开始进入主题 for(int m=0;m<len2;m++){ //=================================================== for(int n=len2;n>=m;n--){ String mstr=""; mstr=str2.substring(m,n); //System.out.println(mstr); int k=str1.indexOf(mstr); //------------------------------------ if(k!=-1 && n-m>max){ tgc++; tg[tgc]=mstr; //------------------------------------ } } //==================================================== } //->->->->->->->->->->->->->->->->->->->->->->->->->-> int[] len=new int[tgc]; //挑出null for(int i=0;i<tgc;i++){ if(tg[i]==null){ tg[i]=""; } } //计算找出的各字符串的长度 for(int i=0;i<tgc;i++){ len[i]=tg[i].length(); } //老掉牙的问题:和排序有关的,求最大值 int mm=len[0]; for(int i=1;i<tgc;i++){ if(len[i]>=mm){ mm=len[i]; } } //打印出符合要求的字符串 for(int i=0;i<tgc;i++){ if(len[i]==mm){ System.out.println(tg[i]); } } //->->->->->->->->->->->->->->->->->->->->->->->->->-> }} 求Effective Java中文电子版 jxl读excel数据乱码,该怎么解决呢?急!!! 关于环境变量的作用请教 Deprecated 标签 求各位前辈帮忙,在JSF中如何显示中文? 程序员们,为了我们下一代说几句吧 请问有谁写过数学公式解析的Java程序吗??? 4 | 7的结果是什么?为什么?4 & 7呢? 用ROSE2000只能对JAVA项目反向工程得到类图,其它图怎么办? 求助:java中 当鼠标移到控件边界时鼠标变成箭头,从而动态调整控件的大小,应该怎么写啊 急:如何实现包含格式的文本复制 请教一个问题
public class Ex0216
{
public static boolean content(String str1,String str2)//str2是否为str1的子字符串
{
for(int i=0;i<=str1.length()-str2.length();i++)
if((str1.substring(i,i+str2.length())).equals(str2)) return true;
return false;
}
public static void main(String args[])
{
String str1,str2,tmp="";
boolean flag,flag1;
int temp,len=0;
Xuw x=new Xuw(System.in);
System.out.println("Input the first string:");
str1=x.getString();
System.out.println("Input the second string:");
str2=x.getString();
System.out.println("\nthe first string is: "+str1);
System.out.println("the second string is: "+str2);
String out[]=new String[str1.length()];
len=0;
for(int i=0;i<str1.length();i++)
{
temp=i;
for(int j=0;j<str2.length();j++)
{
flag1=true;
flag=false;
for(int k=j;temp<str1.length()&&k<str2.length()&&(str1.charAt(temp)==str2.charAt(k));k++)
{
flag=true;
temp++;
tmp=str2.substring(j,k+1);
}
if(flag)
{
for(int h=0;h<len;h++)
{
if(content(out[h],tmp))
{
flag1=false;
break;
}
if(content(tmp,out[h]))
{
out[h]=tmp;
for(int m=h+1;m<len;m++)
if(content(tmp,out[m]))
{
for(int n=m+1;n>len;n++)
out[n-1]=out[n];
}
flag1=false;
break;
}
}
if(flag1)
{
out[len]=tmp;
len++;
}
}
}
}
if(out[0]==null) System.out.println("There is none mutual substring!");
else
{
System.out.println("The mutual substrings are:");
for(int i=0;i<len;i++)
System.out.println(out[i]);
}
}
}这是求出所有的共有字符串 ,最大的就在里边了 这是很久以前写的了 可能有些不严整的地方 自己改进
这不是wicresoft的笔试题么
其实很简单的
你总知道KMP吧(8要说8知道,KMP去年微创就考过了)
KMP8是传3个参么,最后一个参8是搜索起始位置么
传回的8是子串的首字符位置么那么一个while不等于-1就可以了亚
其实就是KMP,next和主函数一模一样写
效率是O(m+n)
优化不能
其实最好的办法就是java的indexOf+while阿呵呵,100%8会错,不过就是没有那个快而已
也可以写java的next函数,8过估计N麻烦,特别是以java这种繁琐的语法而言我写的到处是箭头,ft,因为居然给出了调用代码。。ft,蛮好不写的
(仔细想过,似乎while里面必须要+1不能+s2的长度的说。)
因为看到sql题目巨简单啊哈哈。。8过居然还是写错了sql唉
弱项就是弱项阿~~~一个when写到子搜索里面去了
召唤大人给出sql
结贴太快了。虽然结了贴子,我还是想贴一下,不然我不是吹牛了。import javax.swing.*;public class str_str {
public static void main(String[] args){
String str1=JOptionPane.showInputDialog("please input the first number:");
//第一个字符串
String str2=JOptionPane.showInputDialog("please input the second number:");
//第二个字符串
if(str1.length()<str2.length()){
String str3;
str3=str1;
str1=str2;
str2=str3;
}//使str1总不会比str2短
int len1=str1.length();
//第一个字符串的长度
int len2=str2.length();
//第一个字符串的长度
int max=0;
//二个字符串中相等且最长的子串的长度
int count=0;
//记录在某一次查询中有多少个连续的字符相等
int tgc=0;
//记录符合要求的字符串的个数
String[] tg=new String[len1*len2];
//为可能符合的字符串开辟空间以便存储
//以下开始进入主题
for(int m=0;m<len2;m++){
//===================================================
for(int n=len2;n>=m;n--){
String mstr="";
mstr=str2.substring(m,n);
//System.out.println(mstr);
int k=str1.indexOf(mstr);
//------------------------------------
if(k!=-1 && n-m>max){
tgc++;
tg[tgc]=mstr;
//------------------------------------
}
}
//====================================================
}
//->->->->->->->->->->->->->->->->->->->->->->->->->->
int[] len=new int[tgc];
//挑出null
for(int i=0;i<tgc;i++){
if(tg[i]==null){
tg[i]="";
}
}
//计算找出的各字符串的长度
for(int i=0;i<tgc;i++){
len[i]=tg[i].length();
}
//老掉牙的问题:和排序有关的,求最大值
int mm=len[0];
for(int i=1;i<tgc;i++){
if(len[i]>=mm){
mm=len[i];
}
}
//打印出符合要求的字符串
for(int i=0;i<tgc;i++){
if(len[i]==mm){
System.out.println(tg[i]);
}
}
//->->->->->->->->->->->->->->->->->->->->->->->->->->
}
}