LeetCode210403回文数和反转字符串中元音字母

回文数

双指针,跳过不是字母或数字的字符。(!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);
    }

猜你喜欢

转载自blog.csdn.net/m0_47119598/article/details/115420264