如何解决通过精确替换一个字符,使字符串在字典上最小且非回文
给出回文字符串回文,用任何小写英文字母精确替换一个字符,以使该字符串成为词典上最小的不是回文的字符串。
这样做之后,返回最后一个字符串。如果没有办法,请返回空字符串。
我想出了以下方法,这需要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'
这样恒定的时间更改索引处的字符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。