所谓回文字符串,就是一个字符串从左到右读和从右到左读是完全一样的。比如:"level" 、“aaabbaaa”、 "madam"、"radar"。

如何判断字符串是否是回文呢?解决思路如下:

1. 采取穷举法(Brute Force algorithm),枚举并检查(enumerate & check)字串符的第一项和最后一项是否等同

2. 把检查范围逐步缩小,如果字串符的第一项和最后一项等同,那么去除字串符的第一项和最后一项,检查新的字符串,以此类推

代码如下:

  1. def isPalindrome(s):
  2. if len(s) < 2: #如果字符串只有0个或1个字符,那么该字符串符合回文的定义
  3. return True
  4. if s[0]!=s[-1]: #如果字符串不止一个字符,那么检查字串符的第一项和最后一项是否等同
  5. return False
  6. return isPalindrome(s[1:-1]) #字串符的第一项和最后一项等同,所以去除字符串的第一项和最后一项,继续进行检查
  7.  
  8. str=input("请输入一个字符串: ")
  9. if isPalindrome(str):
  10. print(str+"是一个回文字符串")
  11. else:
  12. print(str+"不是一个回文字符串")

运行结果如下:

请输入一个字符串: madam
madam是一个回文字符串

如果用迭代(Iteration)方法,也可以解出此题,但是要复杂很多。所以,到底是用递归法还是迭代法需要仔细斟酌。

参考:麻省理工学院公开课:计算机科学及编程导论 (第4课)

附:最简单的解法

  1. def isPalindrome(s):
    return s == s[::-1]

用递归方法判断字符串是否是回文(Recursion Palindrome Python)的更多相关文章

  1. AC日记——判断字符串是否为回文 openjudge 1.7 33

    33:判断字符串是否为回文 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个字符串,输出该字符串是否回文.回文是指顺读和倒读都一样的字符串. 输入 输入为一行字符串(字符串中 ...

  2. C#进行回文检测,判断字符串是否是回文的代码

    下面代码内容是关于C#进行回文检测,判断字符串是否是回文的代码,应该是对各位朋友有些好处. Console.WriteLine("算法1:请输入一个字符串!");string st ...

  3. YTU 2802: 判断字符串是否为回文

    2802: 判断字符串是否为回文 时间限制: 1 Sec  内存限制: 128 MB 提交: 348  解决: 246 题目描述 编写程序,判断输入的一个字符串是否为回文.若是则输出"Yes ...

  4. Java - 判断字符串是否是回文

    首先,回文是指类似于“12345”,“abcdcba”的形式,即正念和反念都是一样的字符串 判断字符串是否是回文,这边介绍3种办法 将字符串翻转,判断翻转后的字符串和原字符串是否相等 public s ...

  5. C语言:判断字符串是否为回文,-函数fun将单向链表结点数据域为偶数的值累加起来。-用函数指针指向要调用的函数,并进行调用。

    //函数fun功能:用函数指针指向要调用的函数,并进行调用. #include <stdio.h> double f1(double x) { return x*x; } double f ...

  6. type-of-python作业-判断字符串是否属于回文需要忽略其中的标点、空格与大小写

    type-of-python作业 作业练习:要想检查文本是否属于回文需要忽略其中的标点.空格与大小写.例如,"Rise to vote, sir."是一段回文文本,但是我们现有的程 ...

  7. 判断字符串是否为回文 python

    回文正序和逆序一样的字符串,例如abccba 方法一 def is_palindrome1(text): l = list(text) l.reverse() t1 = ''.join(l) if t ...

  8. Java判断一个字符串是否是回文

    package com.spring.test; /** * 判断字符串是否为回文 * * @author liuwenlong * @create 2020-08-31 11:33:04 */ @S ...

  9. javascript判断给定字符串是否是回文

    //判断给定字符串是否是回文     function isPalindrome(word) {         var s = new Stack();         for (var i = 0 ...

随机推荐

  1. C#泛型创建实例

    class Test<T> where T : new() { public static T Instance() { return new T(); } } 就上面这方法, 居然比ne ...

  2. Python全栈开发之路 【第三篇】:Python基础之字符编码和文件操作

    本节内容 一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成 ...

  3. Full Regularization Path for Sparse Principal Component Analysis

    目录 背景 Notation Sparse PCA Semidefinite Relaxation Low Rank Optimization Sorting and Thresholding 背景 ...

  4. yum 命令

    yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指定的服务器自动下载RPM包 ...

  5. 同事写得Python对页面压测脚本

    #!/usr/bin/env python # *-* coding:utf-8 *-* import threading import requests import time # headers ...

  6. c# winform导出Excel

    //需要注意添加引用Microsoft.Office.Interop.Excel.dll string fileName =DateTime.Now.Year+ DateTime.Now.Month+ ...

  7. vue单页面模板说明文档(1)

    Introduction This boilerplate is targeted towards large, serious projects and assumes you are somewh ...

  8. vue传参二

    <template> <ul> <li v-for="(value,key,index) in list" :key="index" ...

  9. 【学亮IT手记】jQuery callback方法实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  10. (C/C++)区别:数组与指针,指针与引用

    1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型 ...