杭电-终曲-Java代码

杭电-终曲-Java代码
杭电-终曲-Java代码

枚举所有子串求满足的情况即可

import java.util.*;
public class Main{
	public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	int c = sc.nextInt();
	while (c != 0) {
		String s1 = sc.next();
		String s2 = sc.next();
		String s3 = sc.next();
		if (s1.contains(s2) && s1.contains(s3)) {
			ArrayList<String> list = sonString(s1);// 求第一个字符串的所有子串
			ArrayList<String> newlist = new ArrayList<String>();// 创建新集合
			Iterator<String> it = list.iterator();// 获取list的迭代器
			while (it.hasNext()) {// 遍历list集合
				String s = it.next();
				if (s.contains(s2) && s.contains(s3)) {
					newlist.add(s);// 把所有既包含第二个串又包含第三个串的子串添加到新集合中
				}
			}
			String result = newlist.get(0);// 存储最终的字符串
			int min = result.length();
			for (int i = 1; i < newlist.size(); i++) {
				String s = newlist.get(i);
				if (min > s.length()) {// 比较长度,获取最短的子串
					min = s.length();
					result = s;
				} else if (min == s.length()) {
					if (result.compareTo(s) > 0) {// 安字典序列比较大小,获取字典序列最小的子串
						result = s;
					}
				}
			}
			System.out.println(result);// 输出结果
		} else {
			System.out.println("No");
		}
		c--;
	}
}

public static ArrayList<String> sonString(String s) {// 求字符串的子串
	ArrayList<String> list = new ArrayList<String>();
	for (int i = 0; i < s.length(); i++) {
		for (int j = i + 1; j <= s.length(); j++) {
			list.add(s.substring(i, j));
		}
	}
	return list;
	}
}