目录

题目

最长的指定瑕疵度的元音子串

题目描述

解答要求

答案

解析

核心思想


题目

注意要选好先判断左指针还是右指针可以节省不必要的操作。

最长的指定瑕疵度的元音子串

hash算法、双指针

题目描述

定义:开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为瑕疵度。比如:

“a”、“aa”是元音字符串,其瑕疵度都为0

“aiur”不是元音字符串(结尾不是元音字符)

“abira”是元音字符串,其瑕疵度为2

给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0.

子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串

解答要求

时间限制:1000ms,内存限制:256MB

输入

首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0,65535]。

接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0,65535]。

输出

输出为一个整数,代表满足条件的元音字符子串的长度。

样例

输入样例1

0

asdbuiodevauufgh

输出样例1

3

提示样例1

满足条件的最长元音字符子串有两个,分别为uio和auu,长度为3。

输入样例2

2

aeueo

输出样例2

0

提示样例2

没有满足条件的元音字符子串,输出0.

输入样例3

1

aabeebuu

输出样例3

5

提示样例3

满足条件的最长元音字符子串有两个,分别为aabee和eebuu,长度为5

答案

const getLongestFlawedVowelSubstrLen = (flaw, input) => {input = input.toLowerCase()//利用hash算法确定是否为元音let au = {a: 1,e: 1,i: 1,o: 1,u: 1}let left = 0let right = 0let arr = []let count = 0//每次循环右指针向右进一格,直到遍历完数组for (right = 0; right < input.length; right++) {//利用哈希算法判断右指针是否为元音,即子串结尾要求时元音let isRightYuan = au[input[right]] === 1 ? true : falseif (isRightYuan === false) {count++}//要求足够的瑕疵度if (isRightYuan === false || count < flaw) {continue}//足够的瑕疵度,且左边的也是元音,则记录该子串if (count === flaw && au[input[left]] === 1) {let temp = input.substring(left, right + 1)arr.push(temp)continue}//当瑕疵度大于要求的瑕疵度或子串左边非元音时,需要移动左指针while (count > flaw || au[input[left]] !== 1) {left++if (au[input[left - 1]] !== 1) {count--}if (left > right) {left = rightbreak}}//记录跳出循环时是否符合要求if (count == flaw && au[input[left]] === 1) {let temp = input.substring(left, right + 1)arr.push(temp)}}if (arr.length > 1) {//按长度大小给子串排序arr.sort((a, b) => b.length - a.length)if (arr.length > 0) {return arr[0].length}} else if (arr.length === 1) {return arr[0].length} else {return 0}
}
console.log(getLongestFlawedVowelSubstrLen(0, 'asdbuiodevauufgh'))

解析

注意每次如果先判断左指针则每次都要将右指针从头判断到尾,而先判断右指针,左指针只用在原先的基础上移动到下一个符合条件的位置,这样可以节省很多多余的判断。

核心思想

先确定右指针是否为元音,否就右移,是就判断瑕疵度是否够且左指针也为元音,都满足才记录,不满足,瑕疵度不够就继续右移右指针,瑕疵度超过就右移左指针,直到瑕疵度小于或等于指定瑕疵度,并进行判断是否记录,最后右移右指针进行下次循环。

算法题-双指针(最长的指定瑕疵度的元音子串(答案、解析))相关推荐

  1. 华为机试:最长的指定瑕疵度的元音子串

    题目来源 华为机试:最长的指定瑕疵度的元音子串 题目描述 题目解析 滑动窗口太容易出错了 我们把它想象成一个队列,无脑往queue中塞元素,并且记录非元音的个数,当非元音的个数等于flow个时,记录最 ...

  2. 最长的指定瑕疵度的元音字串

    标题:最长的指定瑕疵度的元音子串 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量 ...

  3. 最新整理,9月阿里巴巴软测面试题158题(测试技术+开 发及环境搭建类+人力资源+答案解析)建议收藏~

    前言 做软件测试工程师,没有人敢小觑 技术的重要性,现在出去面试,无论什么公司,都要跟你扯一扯 你的技术,扯一扯你掌握的知识点,如果啃不下来,很可能就与大厂失之交臂. 9月阿里巴巴面试题笔记答案我已经 ...

  4. 算法题——双指针(错题总结)

    双指针 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务.也可以延伸到多 个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为 ...

  5. 算法题10 最长等差序列问题

    题目 给定一个大小为n的数组,要求写出一个算法,求其最长的等差数列的子序列 分析 该题需要分几种情况考虑. 1. 原数组是有序的,所要求的的子序列可以不连续. 对于数组arr[],不同的等差值d=1, ...

  6. 【LintCode】算法题 1443. 最长AB子串

    描述 给你一个只由字母'A'和'B'组成的字符串s,找一个最长的子串,要求这个子串里面'A'和'B'的数目相等,输出该子串的长度. 这个子串可以为空. s的长度n满足 2<=n<=1000 ...

  7. 回文算法java实现_java算法题:最长回文串

    LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串.在构造过程中,请注意区分大小写.比如"Aa"不能当做一个回文字符串.注 意:假设字 ...

  8. 一些值得注意的算法题——双指针

    75. 颜色分类 // 左指针指向最左,右指针指向最右 // 遍历数组,如果是0则和左指针交换,左指针右移 // 如果是2则和右指针交换,右指针左移 // 因为数组是从左往右遍历,因此可保证左指针以左 ...

  9. 【算法题】MapReduce编程,寻找二度人脉

    这是某资讯APP公司的面试题,考察MapReduce的编程思想. 给定一个人脉关系的文件,从中找到二度人脉.比如给定如下的人脉关系, A B C D E B E F C G G H I J 应输出 A ...

最新文章

  1. grid - 使用相同的名称命名网格线和设置网格项目位置
  2. 图解在emu8086中学习汇编语言数字比较程序
  3. .net core 技术栈 网站收集
  4. SQL Server语句大全(增删改查数据、创建表、删除表、修改表)
  5. 约瑟夫环问题之猴子选大王
  6. 视频目标跟踪算法综述
  7. git 清除 另一个git进程似乎在这个仓库中运行。。。。。
  8. 雅虎前端优化的35条军规
  9. C++函数模板5分钟入门
  10. 查找算法——折半查找(JAVA)
  11. LeetCode 404. Sum of Left Leaves
  12. pandas中对列进行排序(单列/多列)/(升序/降序)/(多列升序,降序控制)
  13. accept 返回0_使用Vue3.0新特性造轮子 WidgetUI3.0 (Upload上传文件组件)
  14. django用sqlite跟mysql_django框架学习:九. django连接mysql,sqlite
  15. 接不住了,能撒手吗?
  16. ubutun下虚拟环境的配置
  17. HDU2594 Simpsons’ Hidden Talents 前缀与后缀转化成用s1去匹配s2
  18. 红警2 技术篇 地图基础ini 教程
  19. Struts2 DTD与XML文件编写
  20. 计算机网络物理层测试

热门文章

  1. 网络Sniffing原理
  2. 人像大片这么拍才像样:OPPO R15加入3D人像打光
  3. Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别
  4. Linux ---动态监控
  5. Android JSON解析并展现在listactivity实例
  6. 【Python基础】第十六篇 | 面向对象之高级篇
  7. 计算机营销专业,计算机营销专业自我评价
  8. html5猜颜色游戏,好看漂亮的html5网页特效学习笔记(3)_猜猜下一个颜色是什么?...
  9. GEP基因表达式编程
  10. 万万没想到,最简单的视频编辑软件竟然是知乎?!