关于公共子串的分析,求两个字符串中所有公共子串个数,以及最长公共子串和长度。

题目:给出两个字符串,需要计算它们所有公共子串的个数,以及其中最长公共子串和长度值。并用空格隔开;如果没有,则输出为0.

思路:对于输入,因为题目为一行输入,所以定义String数组储存,并用空格隔开两个字符串。第一个数组为第一个字符串,第二个数组为第二个字符串。分别用a[0],a[1]表示,并赋值给String字符串。
          两个字符串中求最长公共字符串,先选取出两个中较长的字符串,对于短的字符串进行依次遍历,判断出长字符串包含短字符串最大长度。并将计数+1,进行循环,直到满足两个字符串中短字符串的长度,
        备注:网上笔试题,代码是参考网上别人的,具体出处找不到了,请谅解。摘抄记录下来方便日后学习。如果有问题尽请批评指正,希望可以和大神一起交流。
java代码如下:
import java.util.Scanner;

public class Main03 {
	// 求解两个字符号的最长公共子串  
    public static void maxSubstring(String strOne, String strTwo){  
        // 参数检查  
        if(strOne==null || strTwo == null){  
            System.out.println(0);  
        }  
        if(strOne.equals("") || strTwo.equals("")){  
           System.out.println(0); 
        }  
        // 二者中较长的字符串  
        String max = "";  
        // 二者中较短的字符串  
        String min = "";  
        if(strOne.length() < strTwo.length()){  
            max = strTwo;  
            min = strOne;  
        } else{  
            max = strTwo;  
            min = strOne;  
        }  
        String current = "";  
        Boolean bool =true;
        String temp="";
        int count=0;
        // 遍历较短的字符串,并依次减少短字符串的字符数量,判断长字符是否包含该子串  
        for(int i=0; i<min.length(); i++){  
            for(int begin=0, end=min.length()-i; end<=min.length(); begin++, end++){  
                current = min.substring(begin, end);  
                if(max.contains(current)){  
                	count++;
                	if(bool)
                	
                	{
                		temp=current;
                		bool =false;
                	}
                    
                }  
            }  
        } 
        System.out.println(count+" "+temp.length());
        //输出最大公共长度的字符串
        System.out.println(temp);
       
    }  
      
    public static void main(String[] args) {  
    	Scanner in = new Scanner(System.in);
    	
    	while(in.hasNext())
    	
    	{
    			String  aa = in.nextLine();
    			String[] a = aa.trim().split(" ");
    
    				String m =a[0];
    				String n =a[1];
    				new Main03().maxSubstring(m, n);	
    	}
    	

    }  

}

样例输入:
abc edg
abc a
abc ab
样例输出:
0 0
1 1 
 3 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值