Solution:
1: Consider the simplest case: the string is palindrome, and the length of string is even. For example, 000000
. For this case, Bob must win. See operations below:
A:100000
; B:100001
; A:110001
; B:110011
; A:111011
; B: reverse
; A: 111111
.
So that: Every time, after Alice changed 0 to 1. Bob also changes the corresponding 0 to 1 to keep the string palindrome. Until last two 0, at that time, Bob do one reverse operation.
But there is one exception: if the string is palindrome, and the length is even, but it is all 1s. Then the result is draw.
2: Now consider the case that: the string is palindrome, but the length is odd. Based on case 1, we find that the second player will win, and will win 2 points. So, if the center is 0, then Alice will change on this firstly, and get win.
3: Then consider the case that string is not palindrome. For this case Alice will be happy. Let us consider there are more than 2 pairs not palindrome. For example, 00000111
.
A:reverse
; B:10000111
; A:reverse
...
Based one first cases, the winner at most win 2 points. So, before the string become palindrome, Alice continually reverses the string, and get an advantage of at least 2 points. So, Alice will win.
4: Then let us consider the case that have 1 pair not palindrome. For this case, it same to the case 2. Alice will take this firstly and get win.
But one exception: if there is only one 0 exclude this no palindrome pos. For example, 001
, and exclude no palindrome pos: 0
. For this case, If the first step of Alice is reverse, then Bob will change to 101
. Then Alice must change to 111
. If the first step of Alice is 011
or 101
, then Bob will change to 111
. So, draw.
5: Now the last case is: there are exactly 2 pairs not palindrome. For example, 000011
. For this case:
A:reverse
; B:100011
;
Now, A:110011
. And Alice is second player, will win.
Code:
Java
C++