POJ 3080 Blue Jeans(Java暴力)

Blue Jeans

【题目链接】Blue Jeans

【题目类型】Java暴力

&题意:

就是求k个长度为60的字符串的最长连续公共子串,2<=k<=10
规定:
1、 最长公共串长度小于3不输出
2、 若出现等长的最长的子串,则输出字典序最小的串

&题解:

这个我刚开始用c++写的,真的是恶心到我了,啥都要自己实现,所以突然就想到用Java试试,结果还真的挺简单.思路就是在第1个串中找出所有子串,之后去下面找就行了.
String.compareTo(Sting )是字符串比较; subString 区间是 [ , ) 左闭右开的; String.indexOf(str) 是返回str在字符串中第一次出现的位置,如果没有就返回-1

注意: 1.package zz 是不能放在提交代码里的 否则会Runtime Error
2.public static void main 中的static 不能去掉 否则会Runtime Error

&代码:

import java.io.*;
import java.math.*;
import java.util.*;

public class Main{
	
	static boolean ok(String t,int n,String s[]) {
		for(int i=1;i<n;i++) {
			if(s[i].indexOf(t)==-1) {
				return false;
			}
		}
		return true;
	}
	
    public static void main(String[] args) throws Exception{
    	Scanner cin=new Scanner(System.in);
    	int t=cin.nextInt();
    	while(t-->0) {
    		int n=cin.nextInt();
    		String[] s=new String[23];
//    		System.out.println("n="+n);
    		s[0]=cin.nextLine();
    		for(int i=0;i<n;i++) {
    			s[i]=cin.nextLine();
//    			System.out.println("s["+i+"]="+s[i]);
    		}
    		String ans="";
    		for(int i=0;i<s[0].length();i++) {
    			for(int j=i;j<s[0].length();j++) {
    				String te=s[0].substring(i, j+1);
    				if(ok(te,n,s)) {
//    					System.out.println(te);
//    					System.out.println(ans+"    ===");
    					if(ans.length()<te.length()) {
    						ans=te;
    					}
    					if(ans.length()==te.length()&&ans.compareTo(te)>0) {
    						ans=te;
    					}
    				}
    			}
    		}
    		if(ans.length()>=3) System.out.println(ans);
    		else System.out.println("no significant commonalities");
//    		System.out.println(ok("AGATAC",n,s));
    	}
    	cin.close();
    }
}
原文地址:https://www.cnblogs.com/s1124yy/p/7090261.html