首页 > 编程语言 >力扣1456. 定长子串中元音的最大数目(java)

力扣1456. 定长子串中元音的最大数目(java)

时间:2024-07-24 22:26:30浏览次数:12  
标签:count isVomel ch java int 复杂度 力扣 1456 元音

 题目描述

示例

思路

看到“定长子串”时,我们容易联想到用滑动数组来实现这个算法。
滑动数组允许我们在每次移动窗口时,只需增加新元素并减去旧元素的计数,而不必重新计算整个窗口的内容,相对于其他复杂的算法来说,实现起来更为直观和简单

解题方法

1.首先创建isVomel方法判断是否为元音字母,是则返回1,否则返回0;
2.使用长度为k的循环判断前k个字母有多少个元音(若整道题只用一个for循环的话里面还会嵌套for循环,时间复杂度较高);
3.再用一个从k开始的for模拟滑动数组,只需要判断i位置的元音字母和排除窗口最左侧i-k位置的字母即可

java代码

力扣官方题解:

class Solution {
    public int maxVowels(String s, int k) {
        int len = s.length();
        int count = 0;
        //长度为k的循环判断前k个字母有多少个元音
        for(int i = 0; i < k; i++) {
            count += isVomel(s.charAt(i));
        }
        //定义返回结果max并赋初始值count
        int max = count;
        //count 加上当前字符 s.charAt(i) 是否是元音的值
        //同时减去窗口左侧移出的字符 s.charAt(i-k) 是否是元音的值。
        for(int i = k; i < len; i++) {
            count = count + isVomel(s.charAt(i)) - isVomel(s.charAt(i-k));
            max = Math.max(count, max);
        }
        return max;
    }
    //创建isVomel方法判断是否为元音字母,是则返回1,否则返回0
    public int isVomel(char ch) {
        return ch == 'a' || ch =='e' || ch == 'i' ||ch =='o' || ch =='u' ? 1 : 0;
    }
}

复杂度分析:

时间复杂度

两个for循环总共只要字符串长度的n次遍历,因此时间复杂度为O(n)

空间复杂度

只需要两个额外的内存空间,因此空间复杂度为 O(1)

标签:count,isVomel,ch,java,int,复杂度,力扣,1456,元音
From: https://blog.csdn.net/youxmm/article/details/140575613

相关文章

  • 利用Java Swing实现在线游戏盒子:弹弹堂游戏
    盒子实现游戏......
  • [java][工具使用]使用hutool解析json
    使用hutool解析json注意点:1.数组和字典接受的对象和方法不一样        数组使用JSONArray       字典使用JSONObject2.如果字典中提取不存在的key,返回的结果nullpackagecn.npsel.test;importcn.hutool.json.JSONArray;importcn.hutool.json.JSONOb......
  • Java基础3
    变量概念:内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化。变量的构成三要素: 数据类型、变量名、存储的值Java中变量声明的格式: 数据类型 变量名=变量值说明:1.变量都有其作用域。变量只在作用域内是有效的,出了作用域就失效了。2.在同一个作用域内,不......
  • Java二叉树经典进阶OJ题解
     目录一、判断一颗二叉树是否为对称二叉树1.题目描述:2.代码示例:3.通过演示与分析:二、根据先序遍历结果构造二叉树1.题目描述:2.代码示例:3.通过演示与分析:三、层序遍历的非递归实现1.题目描述:2.代码示例:3.通过演示与分析:四、判断是否为完全二叉树1.题目描述:2.......
  • Java基础常见面试题学习(上)
    1、JVMvsJDKvsJRE①Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,随处可以运行”的关键所在。JVM并不是只有一种!只要满足JVM规范,......
  • IPython的跨界魔术:%%javascript命令深度解析
    IPython的跨界魔术:%%javascript命令深度解析IPython,作为Python编程的强大交互式工具,提供了多种魔术命令来扩展其功能。其中,%%javascript魔术命令允许用户在IPythonNotebook中直接执行JavaScript代码,打通了Python和JavaScript两个世界,为数据可视化、Web内容操作等提供了便......
  • Java流程控制
    Java流程控制用户交互ScannerScanner类获取用户输入Scanners=newScanner(System.in);通过next()与nextLine()获取输入字符串,读取前一般需要hasNext()与hasNextLine()判断是否还有输入的数据注意导入java.unil.Scanner以及关闭scanner顺序结构选择结构if单选择......
  • JAVA小白自学日记Day9
     1.序列化序列化版本号:serialVersionUID,是一个类的序列化版本号。如果在反序列化时,类的serialVersionUID与序列化时的版本号不匹配,那么会抛出 InvalidClassException 异常,表示类的版本不兼容,无法进行反序列化。如果流量没有定义,JDK会自动给与一个版本号,当该类发生变化(......
  • java连接redis和基础操作命令
    引入依赖<!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version></dependency>单机模式连接redismain(){//连接redis的信息默......
  • java中的一些经典算法code
    //1.importjava.util.LinkedList;importjava.util.Queue;publicclassCandyGame{//定义一个点的类,用于记录位置和当前累计的糖果数量staticclassPoint{intx,y,steps,candies;Point(intx,inty,intsteps,intcandies){......