1328.破坏回文串(中等)

1328.破坏回文串(中等) (opens new window)

解法:贪心 除了字符位数为1的不可更改,其余均可替换,将首个非a字符替换为a即可。 若全为a,替换最后一个字符为b 由于题目给定字符串为回文字符串,因而仅需要判定前一半(奇数总数时最中间不需要判断)。

func breakPalindrome(palindrome string) string {
	if len(palindrome) == 1 {
		return ""
	}
	origin := []byte(palindrome)

	// 找到任意一个不是a的,尝试替换为a
	// 成功则返回
	for i := 0; i < len(origin)/2; i++ {
		if origin[i] != 'a' {
			origin[i] = 'a'
			return string(origin)
		}
	}
	// 将最后一个字符替换为b
	origin[len(origin)-1] = 'b'
	return string(origin)
}