String
Description
给N个字符串,可以对长度为偶数的前缀(如果字符串长度为偶数,这里的前缀包括整个字符串)进行翻转,可以翻转任意次,如果翻转后两个字符串相同就可以消去,最后最少剩下多少个字符串。
Solution
可以证明可以实现如下三个操作:
1.
AB->BA
ABCD->ABDC
ABCDEF->ABCDFE
ABCDEFGH->ABCDEFHG
……
2.
ABCD->CDAB
ABCDEF->CDEFAB
ABCDEFGH->CDEFGHAB
……
3.
ABCDEF->ABEFCD
ABCDEFGH->ABCDGHEF
ABCDEFGHIJ->ABCDEFIJGH
…..
证明:
对于AB->BA无须证明
对于ABCD->ABDC:
ABCD->DCBA->CDBA->ABDC
对于ABCDEF->ABCDFE:
ABCDEF->FEDCBA->EFDCBA->ABCDFE
……
对于ABCD->CDAB:
ABCD->DCBA->……->DCAB->CDAB
对于ABCDEF->CDEFAB:
ABCDEF->FEDCBA->……->FEDCAB->CDEFAB
对于ABCDEFGH->CDEFGHAB:
ABCDEFGH->HGFEDCBA->……->HGFEDCAB->CDEFGHAB
……
对于ABCDEF->ABEFCD:
ABCDEF->……->EFABCD->……->ABEFCD
对于ABCDEFGH->ABCDGHEF:
ABCDEFGH->……->GHABCDEF->……->ABCDGHEF
对于ABCDEFGHIJ->ABCDEFIJGH:
ABCDEFGHIJ->……->IJABCDEFGH->……->ABCDEFIJGH
……
证明了这三个操作,就可以给每个字符串中的字符排序,这样就可以判断两个字符串是否能变成同一个字符串。