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();
}
}
上一篇:PHP学习笔记:用php读取xml文件


下一篇:Java高级之类结构的认识