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

如何从字符串中删除单个字符?基本上我有一个字符串: 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")

如您所见,除非在打印行中提供一个字符串,否则它会起作用,因为不仅仅是“边缘”字母被剥离。


红糖糍粑
浏览 191回答 2
2回答

幕布斯6054654

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

喵喵时光机

我正在猜测您在这里寻找什么,因为您的问题不是很清楚,但这适用于去掉您提供的单词的第一个和最后一个字符?Python 2.7.14 (default, Nov 12 2018, 12:56:03) >>> string = "abccbaa">>> print(string[1:-1])bccba
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python