lc345. 反转字符串中的元音字母

news2024/12/26 0:36:23

 元音字母按照从外到内成对的方式反转,不考虑出现的元音字母个数为奇数的情况

双指针:指针1由左向右遍历,指针2由右向左遍历,某个指针指向元音字母时停止,直到它另一个指针也指向元音字母,此时两个指针指向的字母发生交换,交换后,再次按原来的方向遍历,如果指针2 < 指针1,那么说明整个字符串都被遍历,结束遍历

对于交换的条件:一开始的想法是vowel.indexOf(str[i]) >= 0 && vowel.indexOf(str[j]) >= 0 。因为结束条件有外围的 i < j 保证,跑出来发现不对。在交换后i+1,j-1后仍然保持 i < j ,进入循环,进入循环的后一轮i增加、j减少,i > j,i遇到处于后面的元音字母,j遇到处于前面的元音字母,此时二者再次发生交换,交换两次=没交换。所以交换的条件为i < j

代码

import org.junit.Test;


public class RollbackVowel {

    @Test
    public void test() {
        String s = "hello";
        String s1 = "leetcode";
        System.out.println(rollbackVowel(s));
        System.out.println(rollbackVowel(s1));
    }


    //vowel.indexOf(str[i]) >= 0表示str[i]上的字符是元音字母
    //vowel.indexOf(str[i]) < 0表示str[i]上的字符不是元音字母
    public static String rollbackVowel(String string) {
        String vowel = "aeiouAEIOU";
        char[] str = string.toCharArray();

        int i = 0, j = str.length - 1;
        while (i < j) {
            while (i < str.length && vowel.indexOf(str[i]) < 0) {
                i++;
            }

            while (j > 0 && vowel.indexOf(str[j]) < 0) {
                j--;
            }

            if (i < j) {
                swap(str, i, j);
                i++;
                j--;
            }
        }


        return new String(str);

    }

    public static void swap(char[] arr, int i, int j) {
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/853421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YonGPT发布背后,“实用主义”成为大模型落地新风向

近年来伴随着数字经济的高歌猛进&#xff0c;国内企业服务赛道迅速站上行业风口。以ChatGPT为代表的大模型的到来&#xff0c;更为整个企服赛道添了一把火。而7月27日用友对外发布的首个企业服务大模型YonGPT&#xff0c;则正式宣告了企业服务大模型全新时代的到来。 目前参与…

C# 2048小游戏核心算法

文章目录 01.程序结构划分02.去零03.合并04.上移05.下移/左移/右移&#xff0c;只是取数据的方向不同06.提高可读性 01.程序结构划分 02.去零 有序向量“唯一化”的思路。 /// <summary>/// 去零/// </summary>/// <param name"row">对于一行或一…

torch.functional.affine_grid的坑

问题描述&#xff1a;在用torch进行图像仿射变换的时候&#xff0c;平移始终有问题 比如现在想要让一张图对应的tensor平移0.5个图像长度 那么需要先构造一个transform_matrix&#xff0c;这里网上说的是偏移量不是像素值&#xff0c;而是归一化的比例 shift_x 0.5 shift_y…

dependency xxxx not found 爆红

一、根本方法&#xff1a;直接手动安装jar包 mvn官网下载之后&#xff0c;终端进入该jar包目录下&#xff08;把下载的jar包移动到本地仓库&#xff09; 运行mvn install:install-file -Dfilejar包的路径 -DgroupIdgruopId中的内容 -DartifactIdactifactId的内容 -Dversionver…

智能财务分析的无冕之王-奥威BI数据可视化工具

利用智能数据可视化分析工具&#xff0c;可极大提升财务分析效率和报表可读性&#xff0c;缩短从分析到决策的耗时。但财务分析的难度往往比其他分析更高&#xff0c;因为它的分析指标计算组合变化太多也太快。哪些数据可视化工具能胜任智能财务数据分析&#xff1f; 奥威BI数…

共享饮水机开发让饮用水更放心

共享饮水机是指基于共享经济模式&#xff0c;将饮水机资源进行共享的服务&#xff0c;区别于传统饮水机&#xff0c;它是一款集物联网控制、远程上报、设备检测等为一体的设备。通过共享饮水机&#xff0c;用户可以方便地获得新鲜的饮用水而不需要购买和维护自己的饮水机。 共享…

算法通关村——迭代实现二叉树的前中后序遍历

前言 递归就是每次执行方法调用都会先把当前的局部变量、参数值和返回地址等压入栈中&#xff0c;后面在递归返回的时候&#xff0c;从栈顶弹出上一层的各项参数继续执行&#xff0c;这就是递归为什么能够自动返回并执行上一层的方法的原因。因此&#xff0c;我们也可以模拟一个…

业务逻辑基础与实操

文章目录 一、定义二、业务逻辑的挖掘1.常见业务流程电信网厅业务火车票订购业务流程网购业务流程 三、挖掘关键点1.验证码突破2.业务授权安全a.未授权访问b.越权访问i)平行越权&#xff08;水平越权是指相同权限的不同用户可以互相访问&#xff09;ii) 垂直越权&#xff08;垂…

Flutter:屏幕适配

flutter_screenutil flutter_screenutil是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 flutter_screenutil提供了一些用于处理尺寸和间距的方法&#xff0c;使得开发者可以根据设备的屏幕尺寸和密度…

《剑指offer》(6)其他算法

先计算下三角&#xff0c;再遍历一次计算上三角。 class Solution: def multiply(self , A: List[int]) -> List[int]: #长度判断 n len(A) if n < 1: return [] B [1]*n #计算乘矩阵的下三角&#xff0c;B中的每一个数都是A的前一个数和B的前一个数相乘 for i in ran…

“可一学院”区块链学习平台正式启动,助力BSV技术普及与传播

2023年8月8日&#xff0c;上海可一澈科技有限公司&#xff08;以下简称“可一科技”&#xff09; 正式发布区块链学习平台“可一学院”。“可一学院” 立足于BSV区块链技术本源&#xff0c;汇集了多层次的专业课程和学习资源&#xff0c;致力于打造一个适合各类人群使用的一站式…

MobaXterm 中文乱码, 及pojie

中文解决方法&#xff1a; 把“连字”去掉&#xff01; MobaXterm网页&#xff0c;可以生成一个授权文件Custom.mxtpro。放在安装目录就可以了 MobaXterm Keygen (husbin.top)http://b70.husbin.top:5000/

VS+Qt+C++旅游景区地图导航源码实例

程序示例精选 VSQtC旅游景区地图导航 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<VSQtC旅游景区地图导航>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。…

药库管理指南:除了药物质量,这个技能很关键

随着医疗技术的不断进步&#xff0c;药品的质量要求也日益严格&#xff0c;药物的稳定性、疗效以及避免细菌滋生等方面都直接受到温湿度变化的影响。 药品质量和安全是医疗行业的首要任务之一&#xff0c;药库温湿度监控在此过程中发挥着关键作用。通过科学合理地实施温湿度监控…

Java 线程的生命周期和状态(实践加深理解)

一、常规回答&#xff08;八股文&#xff09; 线程的生命周期一共分为有6个状态&#xff0c;在某个时刻中&#xff0c;一个线程只会处在6个状态中的其中一种。 第1&#xff1a;初始状态&#xff08;NEW&#xff09; 当前的线程已经被创建了出来&#xff0c;但是还没有通过调用…

宝塔如何部署springboot前后端分离项目

一&#xff1a;准备工作 1.阿里云购买一个centos的服务器 2.环境准备&#xff1a; 2.1 jdk1.8 2.2 nginx 2.3 mysql 2.4 redis 2.5tomcat 这里根据网上的教学很好安装如果是宝塔的话除了redis都可以一键安装 软件商城安装这三个即可 数据库也是可以直接可视化创建并且导入sq…

计蒜客T1115——字符串判等

水题不解释&#xff0c;考研复习压力偶尔写一道换换心情还不错~ 这里有一个比较有趣的知识点&#xff0c;对于同时输入多个字符串时还要允许空格的输入&#xff0c;那么普通的cin函数就不能满足要求了&#xff0c;这里采用getline函数解决&#xff0c;如下&#xff1a; string …

PS 2023 安装选项页面显示不全

文章目录 PS 2023 安装选项页面显示不全解决办法 PS 2023 安装选项页面显示不全 解决办法 按住Tab键&#xff0c;点击该安装选项页面即可&#xff0c;如下如所示&#xff1a;

【Django】招聘面试管理01 创建项目运行项目

文章目录 前言一、创建项目二、运行项目三、访问后台管理页面四、配置项总结 前言 跟着视频学一学&#xff0c;记录一下。 一、创建项目 照着步骤创建虚拟环境&#xff0c;安装Django等依赖包&#xff0c;创建项目&#xff1a;【Django学习】01 项目创建、结构及命令 > d…

【Linux】带你了解高级IO

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;IO的基本…