回文数
双指针,跳过不是字母或数字的字符。(!Character.isLetterOrDigit(s.charAt(start)))
也算一种特殊情况的判断,但一个英文句子里一定有空格。
正常情况从左右向中心去遍历所有字符,当遍历完之后,从最外层while循环正常退出后,此时可证明这个字符串时回文数。
public boolean isPalindrome(String s) {
int n = s.length();
int start = 0;
int end = n-1;
while (start < end) {
while (start < end && !Character.isLetterOrDigit(s.charAt(start))) {
start++; // 当头指针指向不为字母和数字时
}
while (start < end && !Character.isLetterOrDigit(s.charAt(end))) {
end--; // 当尾指针指向不为字母和数字时
}
if (Character.toLowerCase(s.charAt(start)) != Character.toLowerCase(s.charAt(end))) {
return false;
}
start++;
end--;
}
return true;
}
反转字符串中元音字母
双指针,将AEIOUaeiou单独定义出来,从首尾向中心遍历比较,若当前遍历的字符不包括预先定义好的AEIOUaeiou字符串,则继续向中心遍历,头尾同时进行。交换当前头尾指针指向的字符,将头尾指针向中心移动,继续相同循环判断。
public static String method(String s){
String aeiou = "AEIOUaeiou";
int n = s.length();
int start = 0;
int end = n-1;
char[] chars = s.toCharArray();
while (start < end) {
while (start < end && !aeiou.contains(chars[start] + "")) {
start++; // 当指针指向的字符为aeiou时,start停止前进
}
while (start < end && !aeiou.contains(chars[end] + "")) {
end--; // 当指针所指字符为aeiou时,end停止前进
}
swap(chars,start, end);
start++; // 交换两元音字母后,始末指针均前进,继续判断指向到下一对元音字母
end--;
}
return new String(chars);
}