LeetCode刷题记录01
创始人
2024-04-06 21:21:31
0

1704判断字符串的两半是否相似

    • 题目
    • 我的思路
    • 我的代码
    • 提交结果
    • 其他解
      • 简述思路
      • 提交结果
    • 总结

我的日常碎碎念:今天下班在看综艺,看到群里班长开了个会议,于是决定开始学习,他说今天的每日一题好简单,让我也去刷一下。嗯好吧,我忘了我的账号,微信扫码登录的时候发现这是又新开了个号,当下就决定那就记录下我的刷题进度吧。就写文前的3小时创的号,大家看到这篇文的时候也可以和我一起打卡了。菜鸟想成大神啊!

题目

1704判断字符串的两半是否相似

给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半,前一半为 a ,后一半为 b 。
两个字符串 相似 的前提是它们都含有相同数目的元音(‘a’,‘e’,‘i’,‘o’,‘u’,‘A’,‘E’,‘I’,‘O’,‘U’)。注意,s 可能同时含有大写和小写字母。
如果 a 和 b 相似,返回 true ;否则,返回 false 。

给出的提示(即条件)
2 <= s.length <= 1000
s.length 是偶数
s 由 大写和小写 字母组成

我的思路


关键字:偶数长度  含相同数目的元音  包含大小写

结论:

  1. 稍微晦涩的说法:偶数长度对半分,index从0开始,可划分为0~s.length/2s.length/2~s.length,都是前闭后开的区间;
    通俗来讲:就是以s.length/2为分隔线,小于它的为前半段,大于等于它的为后半段
    这么说是因为偶数长度刚好一半一半分嘛,下标又是从0开始的,因此才会说0~s.length/2(即0≤前半段)为前半段字符串【怕想不通,所以很啰嗦在解释】
    比如说:[1,2,3,4]  偶数长度吧,对半砍吧,那就[1,2]和[3,4],可它们对应的各自的下标是0123,所以说要想刚好分一半,那就得 < 4/2(s.length/2)
  2. 判断相似条件是前后字符串是否含相同数目的元音
  3. 不论大小写都要计算,其实也可以是忽略大小写(但我并没有往这方面想,是看了班长的题解)

我用一个字符串temp来表示大小写元音字母,将传进来的字符串参数转成一个字符数组,对其进行循环遍历,通过temp.indexOf来判断当前字符是否包含在其元音字符串模板里,如果包含则判断它是否小于s.length/2,如果是则前半段的元音数目+1,否则后半段的元音数目+1,最后返回这两个值是否相等的boolean值

我的代码

class Solution {public boolean halvesAreAlike(String s) {//将大小写元音字母写成一个字符串String temp = "aeiouAEIOU";int f=0,b=0;//定义一个记录前半段元音数目的变量f,一个记录后半段元音数目的变量b//将传入的字符串参数转为字符数组char[] chars = s.toCharArray();//直接循环遍历整个字符数组for (int i=0;i//判断该字符是否是元音if (temp.indexOf(chars[i])!=-1){//是元音,且在前半段范围内if(if++;}else {b++;//不在前半段范围内时,计数}}}//循环结束后,判断前后半段的元音数目是否相等return f==b;}
}

提交结果

在这里插入图片描述

其他解

简述思路

直接用一个方法(函数)来计算字符串的元音数目,返回该值;
将字符串分为前后半段依次作为参数传入该方法,得到返回值并进行比较,返回相似结果。

class Solution {public boolean halvesAreAlike(String s) {//通过substring获取前后半段字符串//substring() 方法返回字符串的子字符串String s1 = s.substring(0,s.length()/2);String s2 = s.substring(s.length()/2);//调用自定义方法,得到元音数目int a = count(s1);int b = count(s2);//返回比较元音数目的布尔值return a==b;}//自定义一个用于计算字符串中包含多少个元音数目的方法public static int count(String s){int cnt =0;//遍历字符串for (int i = 0; i < s.length(); i++) {//获取当前下标的字符,再转为String类型String a = String.valueOf(s.charAt(i));//调用字符串的忽略大小写的equalsIgnoreCase方法//equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写if (a.equalsIgnoreCase("a")||a.equalsIgnoreCase("e")||a.equalsIgnoreCase("i")||a.equalsIgnoreCase("o")||a.equalsIgnoreCase("u")){//是元音,计数cnt++;}}//返回元音数目return cnt;}
}

提交结果

在这里插入图片描述

总结

  通过比较执行时间及内存消耗来说,我的那个思路看起来还不错嘛,只有通过不同算法的比较,才能够找到适合自己的最优解,感谢班长给我提供的另一个解题思路,从另一方面也说明了我对字符串的常用方法还不够了解。
  呜呜呜呜,写文好难呀,现在都凌晨三点了,等睡醒了再补补String类型的常用方法。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...