力扣Lc17--- 345.反转字符串中的元音字母(java版)-2024年3月18日

news2024/11/17 23:32:03

1.题目
在这里插入图片描述
2.知识点
注1:
indexOf() 是 Java 中 String 类的方法之一,它用于查找指定字符或字符串在字符串中第一次出现的位置。如果找到了该字符或字符串,则返回它在字符串中的索引位置(从0开始),如果没有找到,则返回-1。
注2:
1)indexOf(int ch):用于查找指定字符(Unicode码)在字符串中第一次出现的位置。如果找到了该字符,则返回它在字符串中的索引位置(从0开始),如果没有找到,则返回-1。

示例:

String str = "hello";
int index = str.indexOf('e');
System.out.println(index); // 输出:1

2)indexOf(String str):用于查找指定字符串在当前字符串中第一次出现的位置。如果找到了该字符串,则返回它在字符串中的索引位置(从0开始),如果没有找到,则返回-1。

示例:

String str = "hello";
int index = str.indexOf("lo");
System.out.println(index); // 输出:3

区别1:
valueOf() 是 Java 中许多类的静态方法,用于将其他类型的数据转换为字符串表示形式。

String 类中,valueOf() 方法有多个重载形式:

valueOf(boolean b):将布尔值转换为字符串。

valueOf(char c):将字符转换为字符串。

valueOf(char[] data):将字符数组转换为字符串。

valueOf(char[] data, int offset, int count):将字符数组的一部分转换为字符串。

valueOf(int i):将整数转换为字符串。

valueOf(long l):将长整型数转换为字符串。

valueOf(float f):将浮点数转换为字符串。

valueOf(double d):将双精度浮点数转换为字符串。

valueOf(Object obj):将对象转换为字符串,调用该对象的 toString() 方法。
int num = 42;
String str = String.valueOf(num);
//将整数 42 转换为字符串 "42"。

3.思路和例子
(1)字符串反转就是类似交换 先定义左右指针,当左指针小于右指针的时候,两数就进行交换
(2)
StringBuilder 是 Java 中用于构建字符串的可变对象。它允许你有效地构建和修改字符串,而无需每次修改都创建一个新的字符串对象,这样可以节省内存并提高性能。

在代码中,StringBuilder sb = new StringBuilder(); 创建了一个空的 StringBuilder 对象,你可以使用它来构建最终的字符串结果。通过 StringBuilder 的 append() 方法,你可以向其中追加字符、字符串或其他数据类型的值,然后通过 toString() 方法将 StringBuilder 对象转换为最终的字符串。

在这个具体的例子中,你可以看到 StringBuilder 用于构建反转后的字符串结果。你可以通过 sb.append(…) 方法来将反转后的字符逐个追加到 StringBuilder 中,最后通过 sb.toString() 方法获取构建好的字符串。
例子1:
当我们使用 StringBuilder 时,通常会追加字符、字符串或其他数据类型的值,并最终获取构建好的字符串。以下是一个示例,演示了如何使用 StringBuilder 构建一个字符串,将一组数字以逗号分隔开:
在这个例子中,我们首先创建了一个空的 StringBuilder 对象 sb。然后,我们遍历整数数组 numbers,将每个数字逐个追加到 StringBuilder 中。在追加数字时,我们检查当前数字是否是数组的最后一个元素,如果不是,就在数字后面追加逗号分隔符。最后,我们使用 sb.toString() 获取构建好的字符串,并将其输出。

import java.util.*;

public class Example {
    public static void main(String[] args) {
        // 假设有一个整数数组
        int[] numbers = {1, 2, 3, 4, 5};

        // 创建一个 StringBuilder 对象
        StringBuilder sb = new StringBuilder();

        // 遍历整数数组,将每个数字追加到 StringBuilder 中
        for (int i = 0; i < numbers.length; i++) {
            // 追加当前数字
            sb.append(numbers[i]);
            
            // 如果不是最后一个数字,追加逗号分隔符
            if (i < numbers.length - 1) {
                sb.append(", ");
            }
        }

        // 获取构建好的字符串
        String result = sb.toString();
        
        // 输出结果
        System.out.println(result);
    }
}

(3)
在Java中,StringBuilder 类的构造函数可以接受多种类型的参数来初始化 StringBuilder 对象。其中一个重要的构造函数接受一个字符串作为参数,这个字符串会被复制到新的 StringBuilder 对象中。

所以,当我们使用 StringBuilder sb = new StringBuilder(s); 这种形式时,我们是在构造一个新的 StringBuilder 对象,该对象的初始内容是字符串 s 的内容。这意味着我们在构造 StringBuilder 对象的同时,会将字符串 s 的内容复制到新的 StringBuilder 对象中。

使用 StringBuilder sb = new StringBuilder(); 这种形式时,我们是在构造一个空的 StringBuilder 对象,没有传入任何初始内容。这种情况下,StringBuilder 对象会初始化为空,我们可以后续通过 append() 方法来逐步添加内容。

所以,根据需要选择使用不同的构造函数形式来初始化 StringBuilder 对象。

(4)将字符数组中的字符逐个追加到 StringBuilder 中,然后返回 StringBuilder 对象转换成的字符串。

这段代码的目的是将字符数组中的字符逐个追加到 StringBuilder 中,然后返回 StringBuilder 对象转换成的字符串。下面是一个例子来说明这个过程:

假设有一个字符数组 charArray,内容为 {‘a’, ‘b’, ‘c’, ‘d’}。

char[] charArray = {'a', 'b', 'c', 'd'};

// 构建一个 StringBuilder 对象
StringBuilder sb = new StringBuilder();

// 遍历字符数组,将每个字符追加到 StringBuilder 中
for (char c : charArray) {
    sb.append(c);
}

// 将 StringBuilder 对象转换为字符串并返回
String result = sb.toString();
System.out.println(result); // 输出:abcd

//在这个例子中,我们首先创建了一个空的 StringBuilder 对象 sb。然后,我们遍历字符数组 charArray,将数组中的每个字符逐个追加到 StringBuilder 中。最后,我们使用 sb.toString() 将 StringBuilder 对象转换为字符串,并将其存储在 result 变量中。最终输出的结果是字符串 “abcd”。

(5)toCharArray() 是 Java 中 String 类的一个方法,用于将字符串转换为字符数组。它将字符串中的每个字符复制到一个新的字符数组中,并返回该字符数组。

String str = "hello";
char[] charArray = str.toCharArray();

我们首先声明了一个字符串 str,内容为 “hello”。然后,我们调用 toCharArray() 方法将字符串转换为字符数组,并将结果存储在 charArray 变量中。最终,charArray 中存储的内容是 {‘h’, ‘e’, ‘l’, ‘l’, ‘o’}。
(6)charAt() 是 Java 中 String 类的一个方法,用于获取字符串中指定索引位置的字符。它接受一个整数参数,表示要获取的字符在字符串中的位置,然后返回该位置的字符。

public char charAt(int index)

String str = "hello";
char ch = str.charAt(1);
System.out.println(ch); // 输出:e

4.代码实现

class Solution {
    public String reverseVowels(String s) {
        int left=0;
        int right=s.length()-1;
        String yuanyin="AEIOUaeiou";
        char[] mm=s.toCharArray();//将字符串变成字符数组,字符数组有利于单个处理字符
      
        while(left<right)
        {//字符串左半部分没含有元音字母
           while(left<right&&yuanyin.indexOf(s.charAt(left))==-1)
           {
            left++;
           }
           //字符串右半部分没含有元音字母
           while(left<right&&yuanyin.indexOf(s.charAt(right))==-1)
           {
            right--;
           }
           if(left<right)
           {
            char temp=mm[left];
            mm[left]=mm[right];
            mm[right]=temp;
            left++;
            right--;
           }
           }
           StringBuilder sb=new StringBuilder();
           for(char c:mm)
           {
             sb.append(c);
           }
           return sb.toString();
        }
      
       

    }

方法2:没有什么变动 ,只是把构造StringBuilder直接换成了 ,将数组字符 返回到一个新的字符串 return new string(mm).

class Solution {
    public String reverseVowels(String s) {
        int left=0;
        int right=s.length()-1;
        String yuanyin="AEIOUaeiou";
        char[] mm=s.toCharArray();//将字符串变成字符数组,字符数组有利于单个处理字符
      
        while(left<right)
        {//字符串左半部分没含有元音字母
           while(left<right&&yuanyin.indexOf(s.charAt(left))==-1)
           {
            left++;
           }
           //字符串右半部分没含有元音字母
           while(left<right&&yuanyin.indexOf(s.charAt(right))==-1)
           {
            right--;
           }
           if(left<right)
           {
            char temp=mm[left];
            mm[left]=mm[right];
            mm[right]=temp;
            left++;
            right--;
           }
           }
        //   StringBuilder sb=new StringBuilder();
          // for(char c:mm)
          // {
          //   sb.append(c);
          // }
          // return sb.toString();
           // 将字符数组转换为字符串
        return new String(mm);
        }
      
       

    }

方法三:思想没有什么变动,就是如果不用加强for循环 ,用数组的普通循环

class Solution {
    public String reverseVowels(String s) {
        int left=0;
        int right=s.length()-1;
        String yuanyin="AEIOUaeiou";
        char[] mm=s.toCharArray();//将字符串变成字符数组,字符数组有利于单个处理字符
      
        while(left<right)
        {//字符串左半部分没含有元音字母
           while(left<right&&yuanyin.indexOf(s.charAt(left))==-1)
           {
            left++;
           }
           //字符串右半部分没含有元音字母
           while(left<right&&yuanyin.indexOf(s.charAt(right))==-1)
           {
            right--;
           }
           if(left<right)
           {
            char temp=mm[left];
            mm[left]=mm[right];
            mm[right]=temp;
            left++;
            right--;
           }
           }
           StringBuilder sb=new StringBuilder();
          for(int i=0;i<mm.length;i++)
           {
             sb.append(mm[i]);
           }
          return sb.toString();
           // 将字符数组转换为字符串
       //第二种方法 return new String(mm);
       
        }
    
    }

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

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

相关文章

【Linux下qt软件安装打包附带问题: dpkg: error processing package xxxx +解决方式+自我尝试+记录】

【Linux下qt软件安装打包附带问题&#xff1a; dpkg: error processing package xxxx 解决方式自我尝试记录】 1、前言2、实验环境3、问题说明4、我的努力与查到解决的方式&#xff08;1&#xff09;补充两个文件&#xff0c;让软件正常执行&#xff08;2&#xff09;尝试修复d…

Elasticsearch8.x版本Java客户端Elasticsearch Java API 如何并发修改

前言 并发控制&#xff0c;一般有两种方案&#xff0c;悲观锁和乐观锁&#xff0c;其中悲观锁是默认每次更新操作肯定会冲突&#xff0c;所以每次操作都要先获取锁&#xff0c;操作完毕再释放锁&#xff0c;适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突&#…

51单片机学习笔记6 数码管显示

51单片机学习笔记5 数码管显示 一、动态数码管1. 动态数码管工作原理2. 工作过程3. 原理图&#xff08;1&#xff09;数码管及74HC245&#xff08;2&#xff09;74HC138译码器 4. 74HC245介绍&#xff08;1&#xff09;**功能**&#xff08;2&#xff09;**引脚**&#xff08;3…

文件操作和异常处理1-读写文件

Python 之 lambda 函数完整详解 & 巧妙运用&#xff1a; https://blog.csdn.net/PY0312/article/details/88956795

jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合

jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合 文章目录 jeecg启动Sentinel 一直是空白页面 解决办法用 外部 Sentinel SpringCloud之Sentinel概述和安装及简单整合 Sentinel概述基本介绍 Sentinel安装下载地址: http…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…

一些 AI 工具

AI 搜索&#xff1a;Phind&#xff0c;perplexity AI聊天大模型&#xff1a;chatgpt&#xff0c; kimi&#xff08;国内可用&#xff0c;支持上传文件&#xff09; AI 机器人&#xff1a;https://www.coze.com/ AI工具集&#xff1b;https://ai-bot.cn/#term-2 agent GPT&a…

Windows错误码2503

2503错误码通常出现在Windows系统中&#xff0c;指的是安装或卸载程序时遇到的错误。 2503错误码表示在安装或卸载程序时发生了一些错误&#xff0c;可能是由于权限不足或某些文件被占用等原因导致的。 解决这个的方法包括&#xff1a; 1.以管理员运行程序安装。 2.如果程序右…

批量缩放图片,按比例轻松调整,高效处理一键完成

在数字化时代&#xff0c;图片处理已成为我们日常生活和工作中不可或缺的一部分。无论是为了网页制作、社交媒体分享&#xff0c;还是为了打印照片、制作相册&#xff0c;我们都需要对图片进行各种调整和优化。其中&#xff0c;按比例缩放图片是一个常见的需求。 第一步&#…

在连续请求过程中,如何取消上次的请求?

前言 这个问题想必很多朋友都遇到过&#xff0c;我再详细说一下场景&#xff01; 如 Boss 搜索框所示&#xff1a; 先输入1 再输入2 再输入3 再输入123 请求参数依次为&#xff1a;1 12 123 123123 请求参数通过右侧的 query 参数也可以看到&#xff0c;一共请求了四次。 不…

腾讯云优惠券领取的几种方法,助你降低云服务成本

随着云计算技术的广泛应用&#xff0c;越来越多的企业和个人选择使用云服务来降低运营成本、提高运营效率。腾讯云作为国内领先的云服务提供商&#xff0c;凭借其出色的性能、稳定性和安全性&#xff0c;赢得了广大用户的信赖。为了回馈用户&#xff0c;腾讯云经常推出各种优惠…

matlab simulink 工业汽轮机调节系统的模糊PID控制器设计

1、内容简介 略 72-可以交流、咨询、答疑 工业汽轮机调节系统的模糊PID控制器设计 工业汽轮机;调节系统;模糊PID;自调整论域 2、内容说明 略 摘要&#xff1a;针对汽轮机电、热栽荷存在不确定因素&#xff0c;简单的线性和非线性微分方程不能完全代表 实际调节系统&#…

数据库国产化探究及升级改造过程指导

一、背景 在信创“自主可控”的浪潮下&#xff0c;政企行业首当其冲&#xff0c;基于国产化信创的要求&#xff0c;本部门某业务后端应用也需要针对分析开源组件的风险和开源协议的商业应用限制&#xff1b;能用国产化替代的评估后尽可替代割接&#xff0c;本期针对传统数据库…

2024全新快递平台系统独立版小程序源码|带cps推广营销流量主+前端

2024全新快递平台系统独立版小程序源码|带cps推广营销流量主前端程序源码 程序介绍 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c;德邦等&…

DensityCalculator 程序(1D 2D):通过 VMD 可计算 LAMMPS 轨迹的密度(一)

主要内容 “在分子动力学&#xff08;MD&#xff09;模拟中描述原子层面的结构信息是材料建模与模拟领域研究人员的一项必要任务。密度分布的可视化通常是结构表征中最重要的特性之一。可视化分子动力学&#xff08;VMD&#xff09;是一种广泛使用的分子可视化软件包&#xff…

vue中如何查看组件有哪些函数与变量

在开发的过程中&#xff0c;经常用到他人的框架&#xff0c;特别是开源框架比如element,uniapp等。其中就涉及到框架里对应的组件。而组件里又有哪些内置的函数&#xff0c;我们通常是去查官方文档。然后很多的时候需求的多样性&#xff0c;要改的地方也是不一样的&#xff0c;…

Java------数据结构之栈与队列(简单讲解)

本篇碎碎念&#xff1a;时隔n个月&#xff0c;继续写博客&#xff0c;假期落下的进度&#xff0c;在开学后努力追赶&#xff0c;假期不努力&#xff0c;开学徒伤悲啊&#xff0c;此时此刻真想对自己说一句&#xff0c;活该啊~~~~ 欠下的链表练习题讲解会在下次更新~~~~ 今日份励…

数仓建模简介

1 建模的意义 如果把数据看作图书馆里的书&#xff0c;我们希望看到它们在书架上分门别类地放置&#xff1b;如果把数据看作城市的建筑&#xff0c;我们希望城市规划布局合理&#xff1b;如果把数据看作电脑文件和文件夹&#xff0c;我们希望按照自己的习惯有很好的文件夹组织方…

从政府工作报告中的IT热词统计探计算机行业发展(二)人工智能+:3次

政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&#xff0c;从政府工作报告中探寻计算…

快递送上门,别太难为快递小哥了

新修订的《快递市场管理办法》正式落地半个月&#xff0c;就给快递行业来了场大热闹。 与之相关的&#xff0c;例如&#xff1a;快递新规&#xff1b;快递员收入减半&#xff1b;快递员离职潮&#xff1b;大把快递员离职去送外卖&#xff1b;上门送件快递加钱...... 简单来说&…