1328. Break a Palindrome
1 | class Solution { |
Greedy. 就是找第一个不是a的位置是哪里. 如果找不到(即都是), 那么最后一个字符变成b即可. 如果找到了, 需要判断是奇数正中间的还是其他情况. 如果是奇数正中间, 我们把它改成a, 这样还是palindrome, 因此此时需要把最后一个字符改成a. 如果不是奇数正中间, 我们把遇到的这个改成a即可.
由于是palindrome, 我们只需要遍历一半即可. 如果我们遍历完发现ptr == halfLength, 不管palindrome是奇数还是偶数长度, 我们都需要把最后一个字符改成b, 因为偶数长度代表着整个string都是a, 奇数长度代表着我们无法通过改变正中间的字符让string变为non-palindrom, 即使正中间可能不是a. 如果遍历完发现ptr < halfLength, 这说明我们找到了一个非a的位置并且不是正中间, 因此把它变为a即可.
时间复杂度: O(n)
空间复杂度: O(n) ans创造了一个数组.
