请帮助我完成在线编码面试挑战时遇到的以下任务。
作为输入,您将得到回文字符串,您只能替换其中的一个字符,修改后它应满足以下两个条件:
我无法提供任何解决方案。但这是我的逻辑:
首先,字符串在python中是不可变的,因此首先需要将其转换为list。然后可能需要使用某种循环来替换list中的元素,然后将list转换回字符串并检查:
1。如果字符串是回文 2.从字典上看是否小于
但是我不知道我需要替换什么?应该是另一个嵌套循环迭代[a-z]吗?
答案 0 :(得分:0)
假设回文仅包含小写英文字母(因为我们在谈论字串较小的字符串),您只需遵循以下3条规则:
'a'
代替不是'a'
的第一个字符您不需要检查结果是否是回文,如果您更改了一个非中间成员,您将知道它不会是回文(因为您的输入肯定是回文) 您也不需要将其转换为列表,因为字符串已经具有所需的所有功能
此代码可能如下所示:
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'