1.什么是回文串
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
2.回文串的算法
1、初始化标志flag=true;
2、输入字符串str,并获取其长度len;
3、定义并初始化游标i=0,j=len-1,分别指向字符串开头和末尾;
4、比较字符str[i]和str[j],若i==j,转至7,否则往下执行5;
5、若str[i]和str[j]相等,则游标i加1,游标j减1后转至4,否则往下执行6;
6、令标志位flag=flase,结束比较,str不是回文串,算法结束。
7、若str[i]和str[j]相等,结束比较,flag=true,str为回文串,算法结束。
3.案例(回文串判定)
3.1.问题概述
给定一个字符串,如何判断这个字符串是否是回文串?
2 解决方案
解决上述问题,有两种方法可供参考:
(1)从字符串两头往中间扫;
(2)从字符串中间往两头扫。
(1)方法IsPalindrome1
//方法1:两头往中间扫
public boolean IsPalindrome1(String A){
//将字符串A转换为字符数组。
char[] arrayA = A.toCharArray();
//头部下标
int top = 0;
//尾部下标
int end = arrayA.length-1;
if(A.equals("") || A.equals(null)) //非法输入
return false;
while(top < end){
if(arrayA[top++] != arrayA[end--])
return false;
}
return true;
}
(2)方法IsPalindrome2
//方法2:中间往两头扫
public boolean IsPalindrome2(String A){
char[] arrayA = A.toCharArray();
int lenA = arrayA.length;
int mid = lenA/2;
int front; //前半部分
int back; //后半部分
if(lenA % 2 == 0){ //当字符串长度为偶数时
front = mid-1;
back = mid;
}
else{
front = mid -1;
back = mid + 1;
}
if(A.equals("") || A.equals(null))
return false;
while(front >= 0 && back < lenA){
if(arrayA[front--] != arrayA[back++])
return false;
}
return true;
}
package com.ningjie.test;
import java.util.Scanner;
public class Palindrome {
//方法1:两头往中间扫
public boolean IsPalindrome1(String A){
char[] arrayA = A.toCharArray();
int top = 0;
int end = arrayA.length-1;
if(A.equals("") || A.equals(null)) //非法输入
return false;
while(top < end){
if(arrayA[top++] != arrayA[end--])
return false;
}
return true;
}
//方法2:中间往两头扫
public boolean IsPalindrome2(String A){
char[] arrayA = A.toCharArray();
int lenA = arrayA.length;
int mid = lenA/2;
int front; //前半部分
int back; //后半部分
if(lenA % 2 == 0){ //当字符串长度为偶数时
front = mid-1;
back = mid;
}
else{
front = mid -1;
back = mid + 1;
}
if(A.equals("") || A.equals(null))
return false;
while(front >= 0 && back < lenA){
if(arrayA[front--] != arrayA[back++])
return false;
}
return true;
}
public static void main(String[] args){
Palindrome test = new Palindrome();
//写一个打印机进行自定义字符串
Scanner in = new Scanner(System.in);
//在这里输入一个自定义字符串
System.out.println("请输入一个字符串:");
//用string a去装这个字符串
String A = in.nextLine();
//运用上面IsPalindrome1方法去判定该字符串是否为回文串
if(test.IsPalindrome1(A)) {
System.out.println("经过我使用方法IsPalindrome1判断结果为,字符串A是回文字符串");}
else {
System.out.println("经过我使用方法IsPalindrome1判断结果为,字符串A不是回文字符串");}
//运用上面IsPalindrome2方法去判定该字符串是否为回文串
if(test.IsPalindrome2(A)) {
System.out.println("经过我使用方法IsPalindrome2判断结果为,字符串A是回文字符串");}
else {
System.out.println("经过我使用方法IsPalindrome2判断结果为,字符串A不是回文字符串");}
}
}