题目描述:
给定一个字符串,如何判断这个字符串是否是回文串?
分析与解法:
回文串即为正读和反读都一样的字符串,如madam,aba等待。
解法一:两头往中间扫;
给定一个字符串,首先定义头字符和尾字符,然后从两端王字符串的中间扫描,如果头和尾所对应的字符始终一样,则为回文串;
package Test.com;
import java.util.Scanner;
public class IsPalindrome
{
public boolean IsPalindrome(String A)
{
char [] arrayA=A.toCharArray();
int front=0;
int back=arrayA.length-1;
if(A.equals("")||A.equals(null))
return false;
while(front<back)
{
if(arrayA[front++]!=arrayA[back--])
return false;
}
return true;
}
public static void main(String[] args)
{
IsPalindrome test= new IsPalindrome();
Scanner input=new Scanner(System.in);
System.out.println("请输入一个字符串:");
String A = input.nextLine();
if(test.IsPalindrome(A))
System.out.println("字符串为回文串");
else
System.out.println("字符串不为回文串");
}
}
解法二:从中间往两侧扫描
从中间往两侧扫其实就是如同abdba,首先获取字符串的长度,然后计算字符串的中间位置,用front表示中间位置的左侧字符用back表示中间位置的右侧字符,用左侧字符与右侧字符一一对应比较是否相同
package Test.com;
import java.util.Scanner;
public class IsPalindrome
{
public boolean IsPalindrome(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)
{
IsPalindrome test= new IsPalindrome();
Scanner input=new Scanner(System.in);
System.out.println("请输入一个字符串:");
String A = input.nextLine();
if(test.IsPalindrome(A))
System.out.println("字符串为回文串");
else
System.out.println("字符串不为回文串");
}
}