您的位置:首页 > 大数据 > 人工智能

ACM HDOJ 1867 (A + B for you again)

2014-01-19 21:54 357 查看
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1867
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
while (scn.hasNext()) {
String str1 = scn.next();
String str2 = scn.next();
Kmp kmp1 = new Kmp(str1.toCharArray(), str2.toCharArray());
Kmp kmp2 = new Kmp(str2.toCharArray(), str1.toCharArray());
int position1 = kmp1.match();
int position2 = kmp2.match();
if (position1 == position2) {
if (0 > str1.compareTo(str2)) {
System.out.print(str1);
System.out.println(str2.substring(position1));
} else {
System.out.print(str2);
System.out.println(str1.substring(position2));
}
} else if (position1 > position2) {
System.out.print(str1);
System.out.println(str2.substring(position1));
} else {
System.out.print(str2);
System.out.println(str1.substring(position2));
}
}
scn.close();
}

}

class Kmp {

private int modelLength;
private int patternLength;
private char[] model;
private char[] pattern;
private int[] next;

private void calculateNext() {
int i = 0, j = -1;
next[0] = -1;
while (i < patternLength - 1) {
if (-1 == j || pattern[i] == pattern[j]) {
++i;
++j;
if (pattern[i] != pattern[j]) {
next[i] = j;
} else {
next[i] = next[j];
}
} else {
j = next[j];
}
}
}

public Kmp(char[] model, char[] pattern) {
modelLength = model.length;
patternLength = pattern.length;
this.model = model;
this.pattern = pattern;
next = new int[patternLength];
}

public int match() {
calculateNext();
int i = 0, j = 0;
while (i < modelLength && j < patternLength) {
if (-1 == j || model[i] == pattern[j]) {
++i;
++j;
} else {
j = next[j];
}
}
if (i < modelLength) {
j = 0;
}
return j;
}

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM HDOJ 1867 JAVA