介紹:
一個字符串從前往後讀和從後往前讀得到的是同樣的字符串,這就是迴文字符串。求一個字符串,從k開始,長度爲L的字符串是否爲迴文字符串
分析:
1.直接截取從k開始長度爲L的字符串
2.對這個字符串進行遍歷,判斷首尾是否相同,如果相同則繼續遍歷,有一個不同就返回false。
實現:
public class 迴文字符串 {
public static void main(String[] args) {
System.out.print("該子段是否爲迴文字符串?答案:"+judgeHuiWen1("abbba",0,5));
}
//方法1
private static boolean judgeHuiWen1(String str, int start, int length) {
char arr[] = str.toCharArray();
int end = start + length -1;
if(start>str.length()||(start+length)>str.length()){//這裏是對不合法輸入的處理
System.out.println("輸入的參數有問題");
return false;
}
//遍歷整個字符串
for(int i=0;i<length;i++){
//當開始位置大於等於結束位置時,就說明已經遍歷完畢,因爲一個從頭往後走,一個從後往前走。到中間就沒必要再繼續循環了。節約資源。
if(start>=end){
break;
}
//當arr[start]等於arr[end]的時候,就需要start++,end--,然後繼續循環
if(arr[start] == arr[end]){
start++;
end--;
continue;
}else if(arr[start]!=arr[end]){
return false;
}
}
return true;
}
//方法2,和方法1差不多,只是方法1用的數組下標來獲取字符,方法2用的字符串的charAt方法獲取字符,原理相同。
private static boolean judgeHuiWen2(String str,int start,int length){
String newstr = str.substring(start,start+length);
int len = newstr.length();
for(int i=0;i<len;i++){
char a = newstr.charAt(i);
char b = newstr.charAt(len-1);
if(i>=len){
break;
}
if(a == b){
len--;
continue;
}else if(a != b){
return false;
}
}
return true;
}
總結:
我記得之前做過一道藍橋杯的練習題,說是:求四到五位的迴文數,並且各個位數的和爲1-54之間的值。
我當時特別笨,因爲不知道charAt這個方法,所以我瘋狂的用for循環來嵌套,到最後我套了6層for循環,而且還沒做出來。後來請教別人,知道了charAt()這個方法,只需要幾行代碼就可以實現。
所以還是得多看看api,沒準裏面的哪個方法可以直接解決我們的問題。