
展开全部
也许是我水平太差,我觉得这不是一个小程序,还是有点难度的
首先明确子串的概念,字符串abc,共有6个子串,a,b,c,ab,bc,abc,找出两个字符串中所共有的子串,我的思路是这样的,先找到这两个字符串中相同的字符串片段,然后,分解这些片段,这些片段分解后的子串就是两个字符串所共同的子串
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
public class Strhelp {
public static Vector<String> list1=new Vector<String>();
public static Set set1 = new HashSet();
public static Set set2 = new HashSet();
/**
* 从第一个字符串的第一个字符开始,寻找str2中和str1中字符相同的字符及其位置
* @param str1
* @param str2
*/
public static void sameStr(String str1,String str2){
int l1=str1.length();
int l2=str2.length();
for(int i=0;i<l1;i++){
for(int j=0;j<l2;j++){
if(str1.charAt(i)==str2.charAt(j)){
samechar(str1,str2,i,j);
}
}
}
}
/**
* 找到相同的字符及其位置后,以此为基础,向后延长,查找相同的字符串
* @param s1
* @param s2
* @param index1
* @param index2
*/
public static void samechar(String s1,String s2,int index1,int index2){
int length=2;
if((index1+length)<=s1.length()&(index2+length)<=s2.length()){
while(s1.substring(index1, index1+length).equals(s2.substring(index2, index2+length))){
length++;
}
}
list1.add(s1.substring(index1, index1+length-1));
}
/**
* 找到的相同的字符串必然有重复的,这里将重复的消除
* @param list
*/
public static void delsmae(Vector<String> list){
for(int i=0;i<list.size();i++){
set1.add(list.get(i).toString());
}
}
/**
* 遍历set,逐个分解子串
* @param s
*/
public static void zichuan(Set s){
Iterator it = s.iterator();
for(;it.hasNext();){
getchuan(String.valueOf(it.next()));
}
}
/**
* 该函数用于分解字符串,查找子串
* @param str
*/
public static void getchuan(String str){
set2.add(str);
int len=str.length()-1;
int begin=0;
if(str.length()==1){
set2.add(str);
}else{
for(int i=0;i<2;i++){
getchuan(str.substring(0, len));
set2.add(str.substring(0, len));
getchuan(str.substring(1, len+1));
set2.add(str.substring(1, len+1));
}
}
}
public static void main(String[] args){
String str1="sdfsfherrshdrghjjtyasdwr";
String str2="asdfhdfhfrsadfthfsdgfhwe";
sameStr(str1,str2);
delsmae(list1);
zichuan(set1);
System.out.println(set2);//打印相同的子串
}
}
首先明确子串的概念,字符串abc,共有6个子串,a,b,c,ab,bc,abc,找出两个字符串中所共有的子串,我的思路是这样的,先找到这两个字符串中相同的字符串片段,然后,分解这些片段,这些片段分解后的子串就是两个字符串所共同的子串
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
public class Strhelp {
public static Vector<String> list1=new Vector<String>();
public static Set set1 = new HashSet();
public static Set set2 = new HashSet();
/**
* 从第一个字符串的第一个字符开始,寻找str2中和str1中字符相同的字符及其位置
* @param str1
* @param str2
*/
public static void sameStr(String str1,String str2){
int l1=str1.length();
int l2=str2.length();
for(int i=0;i<l1;i++){
for(int j=0;j<l2;j++){
if(str1.charAt(i)==str2.charAt(j)){
samechar(str1,str2,i,j);
}
}
}
}
/**
* 找到相同的字符及其位置后,以此为基础,向后延长,查找相同的字符串
* @param s1
* @param s2
* @param index1
* @param index2
*/
public static void samechar(String s1,String s2,int index1,int index2){
int length=2;
if((index1+length)<=s1.length()&(index2+length)<=s2.length()){
while(s1.substring(index1, index1+length).equals(s2.substring(index2, index2+length))){
length++;
}
}
list1.add(s1.substring(index1, index1+length-1));
}
/**
* 找到的相同的字符串必然有重复的,这里将重复的消除
* @param list
*/
public static void delsmae(Vector<String> list){
for(int i=0;i<list.size();i++){
set1.add(list.get(i).toString());
}
}
/**
* 遍历set,逐个分解子串
* @param s
*/
public static void zichuan(Set s){
Iterator it = s.iterator();
for(;it.hasNext();){
getchuan(String.valueOf(it.next()));
}
}
/**
* 该函数用于分解字符串,查找子串
* @param str
*/
public static void getchuan(String str){
set2.add(str);
int len=str.length()-1;
int begin=0;
if(str.length()==1){
set2.add(str);
}else{
for(int i=0;i<2;i++){
getchuan(str.substring(0, len));
set2.add(str.substring(0, len));
getchuan(str.substring(1, len+1));
set2.add(str.substring(1, len+1));
}
}
}
public static void main(String[] args){
String str1="sdfsfherrshdrghjjtyasdwr";
String str2="asdfhdfhfrsadfthfsdgfhwe";
sameStr(str1,str2);
delsmae(list1);
zichuan(set1);
System.out.println(set2);//打印相同的子串
}
}
展开全部
String s1="sd11";
String s2="22434ssfg11";
ArrayList list=new ArrayList();
for(int i=0;i<s1.length();i++){
//思路是先从s1中按顺序截出字符串然后到s2查看是否含有
for(int j=i+2;j<=s1.length();j++){
String str=s1.substring(i,j);//从s1中去一个大于2个字符的字符串,要是长度1也能比较的话那就失去意义了。多的数不过来。
if(s2.indexOf(str)!=-1){//查看s2是否含有这个str(s1中截来的字符串)
list.add(str);//如果有保存到List集合中
}
}
}
遍历集合查找出共有的字符串
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
不知道你要求具体到什么地步。 。 最好自己完善下
String s2="22434ssfg11";
ArrayList list=new ArrayList();
for(int i=0;i<s1.length();i++){
//思路是先从s1中按顺序截出字符串然后到s2查看是否含有
for(int j=i+2;j<=s1.length();j++){
String str=s1.substring(i,j);//从s1中去一个大于2个字符的字符串,要是长度1也能比较的话那就失去意义了。多的数不过来。
if(s2.indexOf(str)!=-1){//查看s2是否含有这个str(s1中截来的字符串)
list.add(str);//如果有保存到List集合中
}
}
}
遍历集合查找出共有的字符串
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
不知道你要求具体到什么地步。 。 最好自己完善下
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public static void main(String[] args) throws Exception {
List<String> list=new ArrayList<String>();
String a="aaaajklaaaoiudfsdaaaa";
String b="bjklhbbbboiudfsdbbb";
StringBuffer sb=new StringBuffer();
char[] achar=a.toCharArray();
char[] bchar=b.toCharArray();
for (int i = 0; i < achar.length-1; i++) {
int aindex=i;
for (int j = 0; j < bchar.length-1; j++) {
if(achar[i]==bchar[j]&&achar[i+1]==bchar[j+1]){
sb=sb.append(achar[i]).append(achar[i+1]);
while(true){
if(i+2<achar.length&&j+2<bchar.length&&achar[i+2]==bchar[j+2]){
sb=sb.append(achar[i+2]);
i++;
j++;
}else{
list.add(sb.toString());
sb=new StringBuffer();
break;
}
}
}
}
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
题目不明确,先这么写了。
List<String> list=new ArrayList<String>();
String a="aaaajklaaaoiudfsdaaaa";
String b="bjklhbbbboiudfsdbbb";
StringBuffer sb=new StringBuffer();
char[] achar=a.toCharArray();
char[] bchar=b.toCharArray();
for (int i = 0; i < achar.length-1; i++) {
int aindex=i;
for (int j = 0; j < bchar.length-1; j++) {
if(achar[i]==bchar[j]&&achar[i+1]==bchar[j+1]){
sb=sb.append(achar[i]).append(achar[i+1]);
while(true){
if(i+2<achar.length&&j+2<bchar.length&&achar[i+2]==bchar[j+2]){
sb=sb.append(achar[i+2]);
i++;
j++;
}else{
list.add(sb.toString());
sb=new StringBuffer();
break;
}
}
}
}
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
题目不明确,先这么写了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询