问题描述
给出回文字符串回文,用任何小写英文字母精确替换一个字符,以使该字符串成为词典上最小的不是回文的字符串。
这样做之后,返回最后一个字符串。如果没有办法,请返回空字符串。
我想出了以下方法,这需要O(n)时间和O(1)空间:
def breakpalindrome(self,S):
for i in xrange(len(S) / 2):
if S[i] != 'a':
return S[:i] + 'a' + S[i + 1:]
return S[:-1] + 'b' if S[:-1] else ''
有更好的解决方案吗? 如果时间或空间复杂度有误,请纠正我。
解决方法
- 输入错误代码:奇怪的回文。输入“ aba”给出输出“ abb”。正确的输出应为“ aaa”
- 在
len(palindrome) == 1
上返回“”不是正确的选择。我会将空字符串视为回文。 - 字符串在python中是不可变的。因此,您的解决方案的空间复杂度为
O(n)
。再好不过了。 - 就时间或空间复杂性而言,没有更好的解决方案。您必须在最坏的情况下检查整个字符串,例如字符串仅包含“ a”。
- 在字符串可变的语言中,例如在C ++中,空间复杂度可能为
O(1)
,因为人们可以像palindrome[i] = 'a'
或palindrome[palindrome.size() - 1] = 'b'
这样恒定的时间更改索引处的字符。