#判断某一字符串是否为回文序列 #回文序列的定义为从前开始遍历与从后开始遍历序列的顺序一样 #但在实际的判断中,只要看序列的前一半与后一半是否对称即可 #涉及到对称问题,可以借用顺序栈,将前一半元素进栈,然后再遍历后一半元素的时候将前一半元素一个个出栈,一个个比对 #若原来的序列长度是奇数,则在进栈结束后跳过中间的元素,然后在开始进行比对
下面是具体代码:(SqStack类请见我的主页顺序栈的基本操作)
#判断某一字符串是否为回文序列
#回文序列的定义为从前开始遍历与从后开始遍历序列的顺序一样
#但在实际的判断中,只要看序列的前一半与后一半是否对称即可
#涉及到对称问题,可以借用顺序栈,将前一半元素进栈,然后再遍历后一半元素的时候将前一半元素一个个出栈,一个个比对
#若原来的序列长度是奇数,则在进栈结束后跳过中间的元素,然后在开始进行比对
from SqStack import SqStack
def isPalindrome(str):
st=SqStack()#建立一个顺序栈
n=len(str)
i=0
while i<n//2:#将前半个序列的元素进栈
st.push(str[i])
i+=1
if n%2==1:#如果序列的长度是奇数则指针i跳过一个再进行比对
i+=1
while i<n:
if st.pop()!=str[i]#栈里出来一个就和下一个元素进行比较,若不相等则不是回文序列,若是,i+1方便下一次比较
return False
i+=1
return True
print("测试1")
str="abcba"
if isPalindrome(str):
print(str+"是回文")
else:
print(str + "不是回文")
以下是算法执行过程: