替换回文字符串中的一个字符以使其成为非回文python

时间:2018-07-16 05:14:34

标签: python palindrome

请帮助我完成在线编码面试挑战时遇到的以下任务。

作为输入,您将得到回文字符串,您只能替换其中的一个字符,修改后它应满足以下两个条件:

  1. 不是回文字符串
  2. 在字典上要小于原始输入字符串

我无法提供任何解决方案。但这是我的逻辑:

首先,字符串在python中是不可变的,因此首先需要将其转换为list。然后可能需要使用某种循环来替换list中的元素,然后将list转换回字符串并检查:

1。如果字符串是回文 2.从字典上看是否小于

但是我不知道我需要替换什么?应该是另一个嵌套循环迭代[a-z]吗?

1 个答案:

答案 0 :(得分:0)

假设回文仅包含小写英文字母(因为我们在谈论字串较小的字符串),您只需遵循以下3条规则:

  1. 'a'代替不是'a'的第一个字符
  2. 不要尝试替换中间字符(因为它不会影响字符串是否是回文)
  3. 如果新字符串与旧字符串相同,则意味着您找不到任何解决方案,因此无法解决

您不需要检查结果是否是回文,如果您更改了一个非中间成员,您将知道它不会是回文(因为您的输入肯定是回文) 您也不需要将其转换为列表,因为字符串已经具有所需的所有功能

此代码可能如下所示:

pali = raw_input("insert a palindrome: ")

new_string = ""

replaced = False

for i, c in enumerate(pali):
    if not replaced:
        if c > 'a' and (len(pali)/2 != i or len(pali)%2 == 0):
            new_string += 'a'
            replaced = True
        else:
            new_string += c
    else:
        new_string += c
if new_string == pali:
    print "no way to change palindrome to non palindrome and make it lexicographically smaller"
else:
    print "new non palindrome lexicographically smaller string:", new_string

您始终可以根据您对“按字典顺序较小”的定义更改要检查的字符,而不是'a'