题目
输入任意字符串, 判断其是否为回文字符串
(从左到右,从右到左读起来一样)
样例输入: abcdcba
样例输出: true
样例输入: test
样例输出: false
代码
import java.util.Scanner;
public class Homework0507 {
public static void main(String[] args) {
System.out.print("请输入任意字符:");
Scanner sc = new Scanner(System.in);
String str = sc.next(); //接收输入的字符串
System.out.println("方法1:从两头往中间判断");
if(isPalindrome1(str)){
System.out.println("您输入的"+ str +"是回文数");
}else{
System.out.println("您输入的"+ str +"不是回文数");
}
System.out.println();
System.out.println("方法2:从中间往两头判断");
if(isPalindrome2(str)){
System.out.println("您输入的"+ str +"是回文数");
}else{
System.out.println("您输入的"+ str +"不是回文数");
}
}
//方法1
public static boolean isPalindrome1(String str) { //从两头往中间判断 a s d f g hh g f k s a
char[] ch = str.toCharArray(); //将传入的字符串转化成数组
int top = 0; //定义头下标
int end = ch.length - 1; //定义尾下标
boolean result = false; //接收判断结果
if(ch.equals(null) || ch.equals("")){ //判断非法输入
return false;
}
while(top < end){ //循环判断
System.out.println("第" + (top + 1) +"轮比较:" + "[" + top + "]:" + ch[top] + "\t" + "[" + end + "]:" + ch[end]);
if(ch[top++] == ch[end--]){
result = true; //此处不能直接使用return true
}else{
result = false; //此处不能直接使用return false
break; //break不能丢!!!!
}
}
return result;
}
//方法2
public static boolean isPalindrome2(String str) { //从中间往两头判断 asdfgh hgfksa
char[] ch = str.toCharArray(); //将传入的字符串转化成数组
boolean result = false; //接收判断结果
int len = ch.length; //数组长度
int mid = len / 2;
int front; //定义前半部分,头下标
int back; //定义后半部分,尾下标
if (len % 2 == 0) { //当字符串长度为偶数时
front = mid - 1;
back = mid;
} else { //当字符串长度为奇数时
front = mid - 1;
back = mid + 1;
}
if (ch.equals("") || ch.equals(null)) { //判断非法输入
return false;
}
int i = 1;
while (front >= 0 && back < len) { //循环判断
System.out.println("第" + i++ +"轮比较:" + "[" + front + "]:" + ch[front] + "\t" + "[" + back + "]:" + ch[back]);
if (ch[front--] == ch[back++]) {
result = true; //此处不能直接使用return true
} else {
result = false; //此处不能直接使用return false
break; //break不能丢!!!!
}
}
return result;
}
}
运行结果
//偶数长度
请输入任意字符:asdfgghdsa
方法1:从两头往中间判断
第1轮比较:[0]:a [9]:a
第2轮比较:[1]:s [8]:s
第3轮比较:[2]:d [7]:d
第4轮比较:[3]:f [6]:h
您输入的asdfgghdsa不是回文数
方法2:从中间往两头判断
第1轮比较:[4]:g [5]:g
第2轮比较:[3]:f [6]:h
您输入的asdfgghdsa不是回文数
---------------------------------------------------------------------------------------
//奇数长度
请输入任意字符:asdfggdsa
方法1:从两头往中间判断
第1轮比较:[0]:a [8]:a
第2轮比较:[1]:s [7]:s
第3轮比较:[2]:d [6]:d
第4轮比较:[3]:f [5]:g
您输入的asdfggdsa不是回文数
方法2:从中间往两头判断
第1轮比较:[3]:f [5]:g
您输入的asdfggdsa不是回文数
---------------------------------------------------------------------------------------
//奇数长度
请输入任意字符:asdfgfdsa
方法1:从两头往中间判断
第1轮比较:[0]:a [8]:a
第2轮比较:[1]:s [7]:s
第3轮比较:[2]:d [6]:d
第4轮比较:[3]:f [5]:f
您输入的asdfgfdsa是回文数
方法2:从中间往两头判断
第1轮比较:[3]:f [5]:f
第2轮比较:[2]:d [6]:d
第3轮比较:[1]:s [7]:s
第4轮比较:[0]:a [8]:a
您输入的asdfgfdsa是回文数
总结
方法1:从两头往中间判断 与 方法2:从中间往两头判断 ,两者运行效率视情况各有快慢