为了账号安全,请及时绑定邮箱和手机立即绑定

单个特定字符删除,无需切片或条带,

单个特定字符删除,无需切片或条带,

红糖糍粑 2021-09-14 15:17:15
如何从字符串中删除单个字符?基本上我有一个字符串: abccbaa我想删除第一个和最后一个字母。使用string.rstriporstring.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")如您所见,除非在打印行中提供一个字符串,否则它会起作用,因为不仅仅是“边缘”字母被剥离。
查看完整描述

2 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

不需要切片/替换字符串并且成本很高,因为它一遍又一遍地创建字符串。在字符串不太方便处理的语言(如 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


查看完整回答
反对 回复 2021-09-14
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我正在猜测您在这里寻找什么,因为您的问题不是很清楚,但这适用于去掉您提供的单词的第一个和最后一个字符?


Python 2.7.14 (default, Nov 12 2018, 12:56:03) 

>>> string = "abccbaa"

>>> print(string[1:-1])

bccba


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信