public class ShareChar
{
public String search(String s1,String s2)
{
String max = "" ;
for ( int i = 0 ; i < s1.length(); i ++ )
{
for ( int j = i + 1 ; j <= s1.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 = " xyzabcdeigj " ;
String output = new ShareChar().search(s1,s2);
System.out.println(output);
}
}
如果是S1=abcdehhhbcdef s2= fabcdefggbcdef
那么这两个字符有2个最大的公共字符串“abcde”和“bcdef”
那么这个程序只能输出一个最大公共字符串
那这样个程序就不符合题目所说的了,应该两个都输出。
这样怎么办?
{
public String search(String s1,String s2)
{
String max = "" ;
for ( int i = 0 ; i < s1.length(); i ++ )
{
for ( int j = i + 1 ; j <= s1.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 = " xyzabcdeigj " ;
String output = new ShareChar().search(s1,s2);
System.out.println(output);
}
}
如果是S1=abcdehhhbcdef s2= fabcdefggbcdef
那么这两个字符有2个最大的公共字符串“abcde”和“bcdef”
那么这个程序只能输出一个最大公共字符串
那这样个程序就不符合题目所说的了,应该两个都输出。
这样怎么办?
import java.util.ArrayList;
import java.util.Iterator;public class ShareChar { public static List<String> search(String s1,String s2)
{
List<String> list = new ArrayList<String>();
String max = "";
for (int i = 0 ; i < s1.length(); i++)
{
for (int j = i+1 ; j <= s1.length(); j++)
{
String sub = s1.substring(i,j);
if ((s2.indexOf(sub) != -1) &&sub.length() >= max.length())
{
if(sub.length()==max.length()){
list.add(sub);
max = sub;
}else{
list.clear();
list.add(sub);
max = sub;
}
}
}
}
return list;
}
public static void main(String[] args) {
String s1 = "abcdehhhbcdef";
String s2 = "fabcdefggbcdef";
Iterator<String> iterator = ShareChar.search(s1, s2).iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}