LeetCode-125番:回文文字列を検証する
タイトル:
文字列を指定して、文字列かどうかを確認します。文字列と数字文字だけを考慮して、文字の大きさや文字を無視できます。
説明:
この問題では、空の文字列を有効な文字列として定義します。
例1:
入力:「Aマン、a plan、a canal:Panama」出力:true
例2:
入力:「race a car」出力:false
コード:
文字列を指定して、文字列かどうかを確認します。文字列と数字文字だけを考慮して、文字の大きさや文字を無視できます。
説明:
この問題では、空の文字列を有効な文字列として定義します。
例1:
入力:「Aマン、a plan、a canal:Panama」出力:true
例2:
入力:「race a car」出力:false
コード:
package leetCode;
/**
* 2018.7.21
*
* @author dhc
*
*/
public class OneHunderdAndTwentyFive {
// , reverse
public static boolean isPalindrome(String s) {
if(s == null) {
return true;
}
char[] str = new char[s.length()];
int index = 0;
for(int i = 0;i < s.length();i++) {
if(( s.charAt(i) >= '0' && s.charAt(i) <= '9') || (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') ||(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z')) {
str[index++] = s.charAt(i);
}
}
String st = new String(str).trim().toLowerCase();
StringBuffer sb = new StringBuffer(st);
// sb ( ),StringBuffer equals , , String
String st1 = sb.reverse().toString();
if(st.equals(st1)) {
return true;
}
return false;
}
// , , 6ms
public static boolean isPalindrome1(String s) {
if(s == null) {
return true;
}
int l = 0;
int r = s.length() - 1;
char lchar = ' ';
char rchar = ' ';
while(l < r) {
//
while(l < r) {
if(( s.charAt(l) >= '0' && s.charAt(l) <= '9') || (s.charAt(l) >= 'a' && s.charAt(l) <= 'z')) {
lchar = s.charAt(l);
l++;
break;
}
//
if((s.charAt(l) >= 'A' && s.charAt(l) <= 'Z')) {
lchar = (char) (s.charAt(l) - 'A' + 'a');
l++;
break;
}
l++;
}
//
while(r > l) {
if(( s.charAt(r) >= '0' && s.charAt(r) <= '9') || (s.charAt(r) >= 'a' && s.charAt(r) <= 'z')) {
rchar = s.charAt(r);
r--;
break;
}
//
if((s.charAt(r) >= 'A' && s.charAt(r) <= 'Z')) {
rchar = (char) (s.charAt(r) - 'A' + 'a');
r--;
break;
}
r--;
}
if(lchar != rchar) {
return false;
}
}
return true;
}
public static void main(String[] args) {
String str = "aaA";
System.out.println(isPalindrome1(str));
}
}