资讯专栏INFORMATION COLUMN

345-反转字符串中的元音字母

Tikitoo / 1862人阅读

摘要:前言今天分享的是反转字符串中的元音字母,原题目要求如下编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

前言

今天分享的是反转字符串中的元音字母,原题目要求如下:

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"

示例 2:
输入: "leetcode"
输出: "leotcede"

说明:
元音字母不包含字母"y"。

补充说明:元音字母为A O E I U a o e i u

解题思路

首先要注意,题目里的要求是把反转字符串中的元音字母,以第一个示例为例子:
从字符串左边遍历的时候,遇到的第一个元音字母所在的索引为1。
而从字符串右边右边遍历的时候,遇到的第一个元音字母所在的索引为4.
所以交换它们的位置、

而我的解题思路是把字符串切割成一个字符数组,从左右两边向中间逼近的方式访问数组。每当检索到左右两边的元音字母就交换位置,直到把所有元素都访问一次后结束。

实现代码
    /**
     * 元音字母列表
     */
    private char[] vowels={"a","o","e","i","u","A","O","E","I","U"};
    /**
     * 反转字符串中的元音字母
     * @param s
     * @return
     */
    public String reverseVowels(String s) {
        char[] chars=s.toCharArray();
        int length=chars.length;//未访问的元素个数
        int leftIndex=0;//从左边访问数组时的索引,模拟指针
        int rightIndex=length-1;//从右边访问数组时的索引,模拟指针
        boolean leftMatch=false;//是否找到符合条件的元素的标志
        boolean rightMatch=false;//是否找到符合条件的元素的标志
        while(length>0){//当未访问元素为0则无需检索元素
            if(isVowel(chars[leftIndex])){//判断从左边开始遍历到元素是否为元音字母
                leftMatch=true;//若是,则记录下标识。停留原位
            }else{
                ++leftIndex;//向右边逼近
                --length;//未访问元素个数减1
            }
            if(isVowel(chars[rightIndex])){//判断从左边开始遍历到元素是否为元音字母
                rightMatch=true;//若是,则记录下标识。停留原位
            }else{
                --rightIndex;//向左边逼近
                --length;//未访问元素个数减1
            }
            if(leftMatch && rightMatch){//若左右都找到元音字母
                //交换位置上的元素
                char tmp=chars[leftIndex];
                chars[leftIndex]=chars[rightIndex];
                chars[rightIndex]=tmp;
                //重置标志位
                leftMatch=false;
                rightMatch=false;
                ++leftIndex;//向右边逼近
                --rightIndex;//向左边逼近
                length=length-2;//未访问元素个数减2
            }

        }
        return String.valueOf(chars);
    }

    /**
     * 判断是否为元音字母
     * @param c
     * @return
     */
    private boolean isVowel(char c){
        for(char vowel:vowels){
            if(vowel==c){
                return true;
            }
        }
        return false;
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76843.html

相关文章

  • LeetCode 345. Reverse Vowels of a String

    摘要:描述编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例输入输出示例输入输出说明元音字母不包含字母。找到所有的元音字母索引,第一个索引对应的元素和最后一个索引对应的元素交换,第二个和倒数第二个交换,第三个和倒数第三个交换。 Description Write a function that takes a string as input and reverse only th...

    archieyang 评论0 收藏0
  • 70道前端LeetCode题目集合及视频讲解(持续更新中...)

    前端LeetCode刷题 下面是已刷的题目的目录。GitHub:https://github.com/cunzaizhuy...每日打卡更新中,欢迎关注。 数组类 26 删除排序数组中的重复项 27 移除元素 35 搜索插入位置 66 加1 80 medium 删除排序数组中的重复项2 88 合并两个有序数组 167 两数之和II - 输入有序数组 118 杨辉三角 169 easy 求众数 1...

    mayaohua 评论0 收藏0
  • JavaScript中的算法(附10道面试常见算法题解决方法和思路)

    摘要:中的算法附道面试常见算法题解决方法和思路关注每日一道面试题详解面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度。值得记住的数组方法有和。一个好的解决方案是使用内置的方法。 JavaScript中的算法(附10道面试常见算法题解决方法和思路) 关注github每日一道面试题详解 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程...

    Cruise_Chan 评论0 收藏0
  • 前端 | 每天一个 LeetCode

    摘要:在线网站地址我的微信公众号完整题目列表从年月日起,每天更新一题,顺序从易到难,目前已更新个题。这是项目地址欢迎一起交流学习。 这篇文章记录我练习的 LeetCode 题目,语言 JavaScript。 在线网站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公众号: showImg(htt...

    张汉庆 评论0 收藏0
  • 小李飞刀:做题第十一弹!

    摘要:第五题对称二叉树难度简单给定一个二叉树,检查它是否是镜像对称的。第十六题最大连续的个数难度简单给定一个二进制数组,计算其中最大连续的个数。第十八题平方数之和难度简单给定一个非负整数,你要判断是否存在两个整数和,使得。 写在前面 最近忙着调教新装备,没有及时的写题解,但是没有在偷懒没刷题喔~来认真整理下最近做的题目~ 之前考虑按tag来刷题,后来收到了推荐的leetcode题解,就根据上...

    ytwman 评论0 收藏0

发表评论

0条评论

Tikitoo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<