Leecode 345 翻转字符串中的元音字母-双指针法

简介: 做算法的步骤:写思路,标注步骤先实现大头考虑细节(越界问题、个例)题目

做算法题以来,最舒服的一道题😀

image.png


做算法的步骤:


写思路,标注步骤

先实现大头

考虑细节(越界问题、个例)

题目

image.png


思路

转换为char型数组

怎么判断是不是元音字母?我想到的是HashMap中的containsKey()方法,那就把元音字母存进Map里

反向双指针,向中间逼近,直到两指针重合或交叉

把结果集(char型数组)拼接成String型字符串

代码

class Solution {
    public String reverseVowels(String s) {
        //1.转换为char数组
        char[] a = s.toCharArray();
        //2.把原因字母存进HashMap,用来判断是不是元音字母
        Map<Character,Integer> map = new HashMap<>();
        char[] words = {'a','o','e','i','u','A','O','E','I','U'};
        for(int i=0;i<words.length;i++){
            map.put(words[i],1);
        }
        //3.双指针向中间逼近,遇到元音字母互换位置,直到两指针重合或交叉
        int i=0;
        int j=a.length-1;
    while(i<j){
        char word1=a[i];
        char word2=a[j];
        if(!map.containsKey(word1)){
            i++;
        }
        if(!map.containsKey(word2)){
            j--;
        }
        if(map.containsKey(word1)&&map.containsKey(word2)){//交换位置
            char temp = word1;
            a[i]=word2;
            a[j]=temp;
            i++;
            j--;
        }
    }
    StringBuilder builder = new StringBuilder();
    for(int k=0;k<a.length;k++){
        builder.append(a[k]);
    }
    String result = String.valueOf(builder);
    return result;
    }
}```


相关文章
|
算法 Linux API
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
362 0
|
Java Maven Spring
【Spring】EL表达式失效的问题(添加 isELIgnored)
【Spring】EL表达式失效的问题(添加 isELIgnored)
|
存储 弹性计算 容灾
华为云从入门到实战 | 云关系数据库备份、恢复及存储容灾服务
主要介绍华为云数据库RDS的备份与恢复部署过程以及SDRS的创建部署过程。
767 0
华为云从入门到实战 | 云关系数据库备份、恢复及存储容灾服务
Java 将Map的toString格式字符串转为 Map
Java 将Map的toString格式字符串转为 Map
1462 0
Java 将Map的toString格式字符串转为 Map
|
存储 SQL 关系型数据库
在 MySQL 中使用 `RTRIM` 函数
【8月更文挑战第8天】
542 8
在 MySQL 中使用 `RTRIM` 函数
|
负载均衡 Cloud Native 数据可视化
Nacos与Eureka比较?
【6月更文挑战第29天】Nacos与Eureka比较?
487 2
|
安全 Ubuntu 网络安全
如何在Ubuntu上配置WordPress安全更新和安装
如何在Ubuntu上配置WordPress安全更新和安装
194 0
|
消息中间件 缓存 并行计算
每秒钟承载600万订单级别的无锁并行计算框架 Disruptor学习
每秒钟承载600万订单级别的无锁并行计算框架 Disruptor学习
157 0
|
安全 Linux Shell
Linux系统之scp命令的基本使用
Linux系统之scp命令的基本使用
546 1
Linux系统之scp命令的基本使用
|
Java 测试技术 定位技术
《手把手教你》系列技巧篇(二十一)-java+ selenium自动化测试-浏览器窗口的句柄(详细教程)
【4月更文挑战第13天】本文介绍了如何获取浏览器窗口句柄,句柄是标识浏览器窗口的唯一ID。文章首先解释了窗口句柄的概念,然后通过Java代码示例展示了在单个、多个窗口句柄情况下的操作,包括打印单个窗口句柄和获取所有窗口句柄的方法。在多窗口句柄的场景中,代码演示了如何在不同标签页之间切换。最后,文章强调了句柄在实际操作中的重要性,特别是在处理多个窗口时。
234 0