• 递归问题:判断某个字串是否是回文


    回文是指正着读和反着读都一样的句子,例如“我是谁是我”。

    递归算法的核心是通过“自己调用自己”将问题规模不断缩减以解决问题。

    为此,递归算法首先最终要的是要有判断结束条件,这是易错点,类似循环中防止无限循环。为解决这个问题通常需要一个控制递归终结的变量,在递归过程中不断改变它的值以达到终结条件,因此该值通常作为函数参数。

    回文问题的算法描述如下:

    1、若字符串中只有一个或零个字符即是回文。

    2、若字符串的首尾字符相同则保留并去掉首尾再次判断,否则排除。

     由此得到源码:

     1 import java.util.Scanner;
     2 
     3 public class Palindrome {
     4     
     5     public static void palJudge(String str,int n)
     6     {
     7         String temp="";
     8         if(n<2)
     9             System.out.println("true");
    10         else
    11         {
    12             if(str.charAt(0)==str.charAt(str.length()-1))
    13             {
    14                 for(int i=1;i<(str.length()-1);i++)
    15                 {
    16                     temp += str.charAt(i);
    17                 }
    18                 palJudge(temp,n-2);
    19             } else {
    20                 System.out.println("false");
    21             }
    22         }
    23     }
    24 
    25     public static void main(String[] args) {
    26         String str;
    27         Scanner in = new Scanner(System.in);
    28         str = in.next();
    29         palJudge(str, str.length());
    30     }
    31 
    32 }

    得到的结果如下:

     

    改进:

    该算法有一个很明显的缺陷就是在递归函数中存在for循环,因此每次递归都要进行一次for循环,致使程序效率低下,而通过控制字符串下标可以规避这个问题,可以将palJudge函数修改为如下:

     1 public static void palJudge(String str,int n)
     2     {
     3         String temp="";
     4         if(n<2)
     5             System.out.println("true");
     6         else
     7         {
     8             if(str.charAt(n)==str.charAt(str.length()-1-n))
     9             {
    10                 palJudge(str,--n);
    11             } else {
    12                 System.out.println("false");
    13             }
    14         }
    15     }
  • 相关阅读:
    Redis 3.0.4 链表
    Redis 3.0.4 简单动态字符串(sds)
    4. 寻找两个有序数组的中位数
    redis主从同步异常
    redis重命名flushall和flushdb重启失败
    redis3.2 aof重写
    【转载】Redis 4.0 自动内存碎片整理(Active Defrag)源码分析
    [转]memcached对key和value的限制 memcached的key最大长度和Value最大长度
    LSM树(Log-Structured Merge Tree)存储引擎
    Linux使用详解(进阶篇)
  • 原文地址:https://www.cnblogs.com/52bb/p/11579511.html
Copyright © 2020-2023  润新知