目錄
1 問題描述
給定一個字符串,如何判斷這個字符串是否是回文串?
所謂回文串,是指正讀和反讀都一樣的字符串,如madam、我愛我等。
2 解決方案
解決上述問題,有兩種方法可供參考:
(1)從字符串兩頭往中間掃;
(2)從字符串中間往兩頭掃。
具體代碼如下:
package com.liuzhen.string_1; import java.util.Scanner; public class StringPalindrome { //方法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){ StringPalindrome test = new StringPalindrome(); Scanner in = new Scanner(System.in); System.out.println("請輸入一個字符串:"); String A = in.nextLine(); if(test.IsPalindrome1(A)) System.out.println("使用方法1判斷結果為,輸入字符串是回文字符串"); else System.out.println("使用方法1判斷結果為,輸入字符串不是回文字符串"); if(test.IsPalindrome2(A)) System.out.println("使用方法2判斷結果為,輸入字符串是回文字符串"); else System.out.println("使用方法2判斷結果為,輸入字符串不是回文字符串"); } }
運行結果:
請輸入一個字符串:
我愛我
使用方法1判斷結果為,輸入字符串是回文字符串
使用方法2判斷結果為,輸入字符串是回文字符串
請輸入一個字符串:
我愛你
使用方法1判斷結果為,輸入字符串不是回文字符串
使用方法2判斷結果為,輸入字符串不是回文字符串
請輸入一個字符串:
abba
使用方法1判斷結果為,輸入字符串是回文字符串
使用方法2判斷結果為,輸入字符串是回文字符串
