我应该为堆栈中的insert函数设置什么索引?

2024-09-23 22:20:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个程序来检查输入的字符串是否是回文,使用堆栈的基本概念。我不知道在stack1.insert函数中输入什么索引。请帮忙?或者你认为有更简单的方法吗?你知道吗

def palindrome(str1):
        stack1 = []
        palInd = False
        for chr in str1:
            stack1.insert(0, chr)
        for i in range(len(str1)-1):
            if str1[i]==stack1.pop():
                palInd = True
            else:
                palInd = False
        return palInd

    print palindrome("madam")

Tags: 方法函数字符串in程序falsefor堆栈
3条回答

正如Ashwini Chaudhary所指出的,这个问题很容易用一个deque解决,它允许从两端轻松弹出。你知道吗

import collections

def is_palindrome(string):
    palindrome = collections.deque(string)
    while len(palindrome) > 1:
        if palindrome.popleft() != palindrome.pop():
            return False
    return True

虽然这个问题肯定可以用堆栈解决,但我想我有一个简单的迭代方法:

def palindrome(string):
    chars = list(string)
    for i in range(0,len(chars)/2):
            if (chars[i] != chars[len(chars)-i-1]):
                    return False
    return True

下面是一个测试:

 print palindrome("sees")
 print palindrome("racecar")
 print palindrome("not a palindrome")
 print palindrome("madam")

结果是:

True
True
False
True

如果你想找更简单的方法。。。最简单的方法就是使用切片:

def is_pal(a):
    return a == a[::-1]

这方面有很多变化,主要是从末端开始迭代。你知道吗

def is_pal(a):
    return a == ''.join(reversed(a))

def is_pal(a):
    forwards,backwards = iter(a), reversed(a)
    return all(x==y for x,y in zip(forwards,backwards))

从技术上讲,如果您是最佳的(处理一些巨大的回文,也许),您不需要迭代整个字符串,只需在中间相遇:

def is_pal(a):
    halflen = len(a) // 2
    forwards,backwards = iter(a[:halflen]), reversed(a[halflen:])
    return all(x==y for x,y in zip(forwards,backwards))

这就接近你要做的事情了,一个德克从两端弹出。你知道吗

相关问题 更多 >