String

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

……

证明了这三个操作,就可以给每个字符串中的字符排序,这样就可以判断两个字符串是否能变成同一个字符串。

posted on 2016-11-08 16:34  JebediahKerman  阅读(240)  评论(0编辑  收藏  举报

导航