天天看點

java 回文字元串英文_leetcode 驗證回文字元串 java實作

這題總體來說并不難,

第一點,首先是要考慮字元串中标點符号對字元串的影響。

第二點,考慮什麼是回文字元串。我開始的思路也出了一些偏差,認為回文的意思在于隻要出現成對的字母就可以了。但深刻了解發現回文的意思在于除了字元串中的标點符号以外字元和數字能夠正反讀取都是一樣的(當然題目要求大小寫字母都可以)。有了這點了解,所想到的是講字元串轉化為數組,并通過兩邊的指針往中間靠攏,判斷是否一緻(中間過濾掉字元串)。

驗證回文字元串是比較常見的問題,所謂回文,就是一個正讀和反讀都一樣的字元串,比如“level”或者“noon”等等就是回文串。但是這裡,加入了空格和非字母數字的字元,增加了些難度,但其實原理還是很簡單:隻需要建立兩個指針,left和right, 分别從字元的開頭和結尾處開始周遊整個字元串,如果遇到非字母數字的字元就跳過,繼續往下找,直到找到下一個字母數字或者結束周遊,如果遇到大寫字母,就将其轉為小寫。等左右指針都找到字母數字時,比較這兩個字元,若相等,則繼續比較下面兩個分别找到的字母數字,若不相等,直接傳回false.

時間複雜度為O(n)

)

是以在Java中所需要用到的知識為:

1.将字元串轉為數組。

2.用到Character.isLetterOrDigit判斷字元是否是數字和字元

3.字母的小寫化 Characte.toLowerCase

public boolean isPalindrome(String s) {

char[] cha = s.toCharArray();

int i = 0, j = cha.length - 1;

while(i < j){

if(!Character.isLetterOrDigit(cha[i]))

i++;

else if(!Character.isLetterOrDigit(cha[j]))

j--;

else

if(Character.toLowerCase(cha[i]) == Character.toLowerCase(cha[j])){

i++;

j--;

}else{

return false;

}

}

return true;

}