POJ 刷题系列:3080. Blue Jeans
2018-01-14 17:58
363 查看
POJ 刷题系列:3080. Blue Jeans
传送门:3080. Blue Jeans题意:
一组字符串,求字符串组的公共最长子串,如果有多个最长,取alphabetical order最小。
思路:
KMP + 暴力枚举子串,不过Java关于模式匹配,已有封装好的代码,如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Arrays; import java.util.Map; import java.util.StringTokenizer; public class Main{ String INPUT = "./data/judge/201801/P3080.txt"; public static void main(String[] args) throws IOException { new Main().run(); } void read() { int t = ni(); while (t --> 0) { int n = ni(); String[] nstrs = new String ; for (int i = 0; i < n; ++i) { nstrs[i] = ns(); } String cand = nstrs[0]; String ans = ""; for (int i = 0; i < cand.length(); ++i) { for (int j = i + 1; j <= cand.length(); ++j) { String key = cand.substring(i, j); if (contains(key, nstrs)) { if (ans.length() <= key.length()) { if (ans.length() < key.length()) ans = key; else { if (ans.compareTo(key) > 0) ans = key; } } } } } if (ans.isEmpty()) { out.println("no significant commonalities"); } else { out.println(ans); } } } boolean contains(String key, String[] nstrs) { for (int i = 1; i < nstrs.length; ++i) { if (!nstrs[i].contains(key)) return false; } return key.length() >= 3; } FastScanner in; PrintWriter out; void run() throws IOException { boolean oj; try { oj = ! System.getProperty("user.dir").equals("F:\\oxygen_workspace\\Algorithm"); } catch (Exception e) { oj = System.getProperty("ONLINE_JUDGE") != null; } InputStream is = oj ? System.in : new FileInputStream(new File(INPUT)); in = new FastScanner(is); out = new PrintWriter(System.out); long s = System.currentTimeMillis(); read(); out.flush(); if (!oj){ System.out.println("[" + (System.currentTimeMillis() - s) + "ms]"); } } public boolean more(){ return in.hasNext(); } public int ni(){ return in.nextInt(); } public long nl(){ return in.nextLong(); } public double nd(){ return in.nextDouble(); } public String ns(){ return in.nextString(); } public char nc(){ return in.nextChar(); } class FastScanner { BufferedReader br; StringTokenizer st; boolean hasNext; public FastScanner(InputStream is) throws IOException { br = new BufferedReader(new InputStreamReader(is)); hasNext = true; } public String nextToken() { while (st == null || !st.hasMoreTokens()) { try { st = new StringTokenizer(br.readLine()); } catch (Exception e) { hasNext = false; return "##"; } } return st.nextToken(); } String next = null; public boolean hasNext(){ next = nextToken(); return hasNext; } public int nextInt() { if (next == null){ hasNext(); } String more = next; next = null; return Integer.parseInt(more); } public long nextLong() { if (next == null){ hasNext(); } String more = next; next = null; return Long.parseLong(more); } public double nextDouble() { if (next == null){ hasNext(); } String more = next; next = null; return Double.parseDouble(more); } public String nextString(){ if (next == null){ hasNext(); } String more = next; next = null; return more; } public char nextChar(){ if (next == null){ hasNext(); } String more = next; next = null; return more.charAt(0); } } static class D{ public static void pp(int[][] board, int row, int col) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { sb.append(board[i][j] + (j + 1 == col ? "\n" : " ")); } } System.out.println(sb.toString()); } public static void pp(char[][] board, int row, int col) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { sb.append(board[i][j] + (j + 1 == col ? "\n" : " ")); } } System.out.println(sb.toString()); } } static class ArrayUtils { public static void fill(int[][] f, int value) { for (int i = 0; i < f.length; ++i) { Arrays.fill(f[i], value); } } public static void fill(int[][][] f, int value) { for (int i = 0; i < f.length; ++i) { fill(f[i], value); } } public static void fill(int[][][][] f, int value) { for (int i = 0; i < f.length; ++i) { fill(f[i], value); } } } static class Num{ public static <K> void inc(Map<K, Integer> mem, K k) { if (!mem.containsKey(k)) mem.put(k, 0); mem.put(k, mem.get(k) + 1); } } }
相关文章推荐
- POJ 3080 Blue Jeans(后缀数组+二分答案)
- poj 3080 Blue Jeans 直接枚举
- POJ 题目3080 Blue Jeans(KMP+暴力)
- POJ 3080 Blue Jeans(KMP+枚举)
- poj 3080 Blue Jeans(KMP匹配,枚举子串)
- poj 3080 Blue Jeans 【kmp+暴力】
- POJ 3080 Blue Jeans
- poj-3080 Blue Jeans(KMP)
- poj 3080 Blue Jeans
- POJ Blue Jeans(3080)-STL&&KMP
- POJ 3080 Blue Jeans (后缀数组)
- POJ 3080 Blue Jeans(KMP 最长公共子串)
- poj3080 Blue Jeans
- poj 3080 Blue Jeans (KMP)
- 【原】 POJ 3080 Blue Jeans KMP 解题报告
- POJ Blue Jeans 3080【KMP+string】
- poj 3080 Blue Jeans 字符串,暴力
- poj_3080 Blue Jeans(KMP应用)
- poj 3080 Blue Jeans 解题报告
- POJ 3080 Blue Jeans(暴力)