问题 1184. -- 有趣的“子串兄弟”

1184: 有趣的“子串兄弟”

时间限制: 1 Sec  内存限制: 128 MB
提交: 34  解决: 14
[提交][状态][讨论版]

题目描述

有两组,每组各有两个字符串(不含空格),其中一组中的两个字符串分别首尾相连,形成两个环,请找出两个环中最长的公共部分(公共部分至少包含3个字符,若有多段相同长度的公共部分,取从左至右最先出现的那一个公共部分),这部分叫做“公共子串1”,同理,在第二组两个字符串中找出“公共子串2”;两个“公共子串”中较短的一个“公共子串”如果能通过若干次顺时针移位(移动一次:每一位向右移动一位,串尾字符移到串头字符)成为较长“公共子串”的子串,那么我们称这两个公共子串为“子串兄弟”。

输入

两行,第一行包含两个字符串,之间用单个空格隔开;第二行包含两个字符串,也用单个空格隔开。(每个字符串长度不超过255

输出

两行,如果是“子串兄弟”,第一行输出“YES”,第二行输出“子串兄弟”通过移位之后得到的公共部分的字符串;如果两组字符串任意一组没有找到公共子串或者两组字符串都有公共子串,但不是“子串兄弟”,第一行输出“NO”,第二行输入“No public part”。

样例输入

样例输入1:
AACFDHJRT RTAACFUJ
TBCSSSDEQQQAAR RTEWPAA

样例输入2:
ASDFGQWERTY UOIUJK
SADWERSDWG SDWQ

(样例1说明:例如输入样例1中第一组字符串的公共子串1是JRTAACF,第二组字符串的公共子串2是AART,而公共子串2可以通过2次向右移动变成公共子串1的子串,所以输出YES,并输出移动后的公共子串的子串RTAA。)

样例输出

样例输出1:
YES
RTAA

样例输出2:
NO
No public part

提示

来源

[提交][状态]