课堂练习判断字符串是否为回文序列

一、题目:判断输入的字符串是否为回文系列。

二、程序基本思路:

1.首先判断若字符串的长度为0或1,如果是,则这个字符串是回文序列,程序直接结束

2.若字符串长度大于1,先将字符串转化成字符数组,定义旗帜flag、字符数组头和尾标识,将字符数组首地址和以上定义传给递归方法

3.用头尾标记数组头尾字符来进行一一比较,如果一致,继续递归调用自身,直至达到递归终止条件。如果中途有不匹配的,返回输出字符串不是回文序列。

递归终止条件为头尾标记相等或相差为1,返回输出字符串是回文序列。

三. 程序源代码

 1 import java.util.Scanner;
 2 
 3 public class panduanhui {
 4      static char []a=new char[1000];
 5      static String str;
 6      static int flag=0;
 7      static int i=0;
 8      static int k=0;
 9     public static void main(String[] args) {
10       Scanner  input=new Scanner(System.in);
11       System.out.println("请输入一个字符串:");
12        str=input.nextLine();
13      //把字符串变成一个字符数组
14        a=str.toCharArray();
15        k=a.length;
16        int flag1=0;
17        if(a.length==1||a.length==0) 
18        {
19            System.out.println("字符串"+str+"是回文序列");  
20        }
21        else {
22        huiwenpanduan(a,i,k);
23        flag1=1;
24        }
25        if(flag1==1)
26        {
27         //判断输出
28        if(flag==0) {
29            System.out.println("字符串"+str+"不是回文序列");
30        }
31        else {
32            System.out.println("字符串"+str+"是回文序列");
33        }
34        }
35 }
36     //将字符数组作为参数传入方法中
37     public static void huiwenpanduan(char[] a,int i,int k) {
38         //首尾字符比较
39         if(a[i]==a[k-1])
40         {
41             //标记前移
42             i++;
43             //标记后移
44             k--;
45             //递归终止条件
46             if(k-i==1||k-i==2) {  
47                 flag=1;
48                 return ;
49             }
50         //递归调用自身
51         huiwenpanduan(a,i,k);
52         }
53         //首尾字符不相同,不是回文序列,返回
54         else {
55             flag=0;
56             return ;
57         }     
58     }
59         
60     }

四、运行结果:

五、总结

1. 递归方法要明确递归终止条件

2.递归要调用自身

3.递归方法每次调用都要减小问题规模

猜你喜欢

转载自www.cnblogs.com/yang2000/p/11575561.html