微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过精确替换一个字符,使字符串在字典上最小且非回文

如何解决通过精确替换一个字符,使字符串在字典上最小且非回文

给出回文字符串回文,用任何小写英文字母精确替换一个字符,以使该字符串成为词典上最小的不是回文的字符串。

这样做之后,返回最后一个字符串。如果没有办法,请返回空字符串。

我想出了以下方法,这需要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 举报,一经查实,本站将立刻删除。