【双指针】Leetcode --- NO.345 反转字符串中的元首字母(Java)

题目描述

在这里插入图片描述

题目分析

  • 元音字母,即 a e i o u以及大写字母A E I O U,所以需要创建一个数组存入这些字符,以供判断
  • 观察例子,发现是头和尾的两个元音字母进行交换,而不是相邻的两个,所以可以使用双指针

解法分析

  • 两个指针,一个从头,一个从尾,如果两个都指向了元音字母,就交换值
    在这里插入图片描述

代码

class Solution {
    public String reverseVowels(String s) {
        // 判空
        if (s==null) return null;
        // 头指针
        int head = 0;
        // 尾指针
        int end = s.length()-1;
        // 字符串转换成字符数组
        char[] result = s.toCharArray();
        // 循环 直到两个指针相遇
        while (head <= end){
            if (!isVowel(result[head])){
                // 如果头指针不是元音字母
                head++;
            } else if (!isVowel(result[end])){
                // 如果尾指针不是元音字母
                end--;
            } else {
                // 如果两个指向的都是元音字母,就交换值
                char temp = result[head];
                result[head++] = result[end];
                result[end--] = temp;
            }
        }
        // 返回字符串
        return new String(result);
    }
    // 判断是否是元音字母
    public boolean isVowel(char c) {
    	if (c == 'a' ||
			c == 'e' ||
			c == 'i' ||
			c == 'o' ||
			c == 'u' ||
			c == 'A' ||
			c == 'E' ||
			c == 'I' ||
			c == 'O' ||
			c == 'U') {
    		return true;
    	}
    	return false;
    }
}

猜你喜欢

转载自blog.csdn.net/Kobe_k/article/details/107461887