• LeetCode刷题记录01


    我的日常碎碎念:今天下班在看综艺,看到群里班长开了个会议,于是决定开始学习,他说今天的每日一题好简单,让我也去刷一下。嗯好吧,我忘了我的账号,微信扫码登录的时候发现这是又新开了个号,当下就决定那就记录下我的刷题进度吧。就写文前的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<chars.length;i++) {
            	//判断该字符是否是元音
                if (temp.indexOf(chars[i])!=-1){
                	//是元音,且在前半段范围内
                    if(i<chars.length/2){
                        f++;
                    }else {
                        b++;//不在前半段范围内时,计数
                    }
                }
            }
            //循环结束后,判断前后半段的元音数目是否相等
            return f==b;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    提交结果

    在这里插入图片描述

    其他解

    简述思路

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

    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    提交结果

    在这里插入图片描述

    总结

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

  • 相关阅读:
    jdk代理和cglib代理
    智源发布线虫生命模型,超级人脑有望在未来15-30年实现
    TiDB x 北京银行丨新一代分布式数据库的探索与实践
    Mybatis传入参数字符串分割成数组作为条件遍历不用in不用in
    Linux安全加固:保护你的服务器
    伊顿将在汉诺威国际商用车展上重点推介可持续商用车技术
    深度学习入门(三十九)计算性能——分布式训练、参数服务器(TBC)
    Unity 使用StateMachineBehaviour让动画控制器状态自动关闭跳出
    单商户商城系统功能拆解35—分销应用—分销概览
    输入网址input,提取标题和正文
  • 原文地址:https://blog.csdn.net/weixin_51229662/article/details/127815574