python - 无需切片或剥离的单个特定字符删除,
问题描述
如何从字符串中删除单个字符?基本上我有一个像这样的字符串:
abccbaa
我希望删除第一个和最后一个字母。使用string.rstrip
orstring.lstrip
方法,所有出现的事件都被删除,我得到一个字符串bccb
。也一样replace
。有没有办法这样做?我不能导入任何东西,我不能使用切片(访问单个字母除外)。我也不能使用任何类型的循环。
为了得到全貌,我需要编写一个递归回文算法。我目前的代码是:
def is_palindrome(s):
if s == '':
return True
if s[0] != s[-1]:
return False
else:
s = s.replace(s[0], '')
s = s.replace(s[-1], '')
return is_palindrome(s)
print is_palindrome("abccbaa")
如您所见,除非提供与打印行中的字符串类似的字符串,否则它将起作用,因为剥离了多个“边缘”字母。
解决方案
不需要切片/替换字符串,而且成本很高,因为它会一遍又一遍地创建字符串。在字符串处理起来不太方便的语言中(如 C),你甚至不会想到会这样做。
当然,您需要某种循环,但递归会解决这个问题。
您可以“以旧方式”执行此操作,只需递归地传递开始和结束索引,并使用嵌套函数将开始条件隐藏给调用者:
def is_palindrome(s):
def internal_method(s,start,end):
if start>=end:
return True
if s[start] != s[end]:
return False
else:
return internal_method(s,start+1,end-1)
return internal_method(s,0,len(s)-1)
start
如果遇到end
或检查的字母不匹配,则递归停止(当然结果不同)
测试一点似乎有效:)
>>> is_palindrome("")
True
>>> is_palindrome("a")
True
>>> is_palindrome("ab")
False
>>> is_palindrome("aba")
True
>>> is_palindrome("abba")
True
>>> is_palindrome("abbc")
False
推荐阅读
- mysql - ERROR 1452:无法添加或更新子行:DELETE 操作上的外键约束失败?
- json - JSON 数据发送无法完成
- javascript - JavaScript _.throttle 不能连续调用 3 次?
- java - 合并两个忽略空值的复杂对象
- javascript - 当我更改内部 HTML 时,按钮停止工作
- php - 想对 php 中组合的 3 个数组使用 foreach 循环
- spring-boot - 两个日期的 Spring Boot 重叠
- tensorflow - 在 jupyter 环境中导入 tensorflow 时出错
- r - 为每个站点排序前 n 个值的列名并在数据框中生成结果
- python - 在损失函数中使用 autograd 时 PyTorch 不更新权重