算法题-双指针(最长的指定瑕疵度的元音子串(答案、解析))
目录
题目
最长的指定瑕疵度的元音子串
题目描述
解答要求
答案
解析
核心思想
题目
注意要选好先判断左指针还是右指针可以节省不必要的操作。
最长的指定瑕疵度的元音子串
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'))
解析
注意每次如果先判断左指针则每次都要将右指针从头判断到尾,而先判断右指针,左指针只用在原先的基础上移动到下一个符合条件的位置,这样可以节省很多多余的判断。
核心思想
先确定右指针是否为元音,否就右移,是就判断瑕疵度是否够且左指针也为元音,都满足才记录,不满足,瑕疵度不够就继续右移右指针,瑕疵度超过就右移左指针,直到瑕疵度小于或等于指定瑕疵度,并进行判断是否记录,最后右移右指针进行下次循环。
算法题-双指针(最长的指定瑕疵度的元音子串(答案、解析))相关推荐
- 华为机试:最长的指定瑕疵度的元音子串
题目来源 华为机试:最长的指定瑕疵度的元音子串 题目描述 题目解析 滑动窗口太容易出错了 我们把它想象成一个队列,无脑往queue中塞元素,并且记录非元音的个数,当非元音的个数等于flow个时,记录最 ...
- 最长的指定瑕疵度的元音字串
标题:最长的指定瑕疵度的元音子串 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量 ...
- 最新整理,9月阿里巴巴软测面试题158题(测试技术+开 发及环境搭建类+人力资源+答案解析)建议收藏~
前言 做软件测试工程师,没有人敢小觑 技术的重要性,现在出去面试,无论什么公司,都要跟你扯一扯 你的技术,扯一扯你掌握的知识点,如果啃不下来,很可能就与大厂失之交臂. 9月阿里巴巴面试题笔记答案我已经 ...
- 算法题——双指针(错题总结)
双指针 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务.也可以延伸到多 个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的 区域即为 ...
- 算法题10 最长等差序列问题
题目 给定一个大小为n的数组,要求写出一个算法,求其最长的等差数列的子序列 分析 该题需要分几种情况考虑. 1. 原数组是有序的,所要求的的子序列可以不连续. 对于数组arr[],不同的等差值d=1, ...
- 【LintCode】算法题 1443. 最长AB子串
描述 给你一个只由字母'A'和'B'组成的字符串s,找一个最长的子串,要求这个子串里面'A'和'B'的数目相等,输出该子串的长度. 这个子串可以为空. s的长度n满足 2<=n<=1000 ...
- 回文算法java实现_java算法题:最长回文串
LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串.在构造过程中,请注意区分大小写.比如"Aa"不能当做一个回文字符串.注 意:假设字 ...
- 一些值得注意的算法题——双指针
75. 颜色分类 // 左指针指向最左,右指针指向最右 // 遍历数组,如果是0则和左指针交换,左指针右移 // 如果是2则和右指针交换,右指针左移 // 因为数组是从左往右遍历,因此可保证左指针以左 ...
- 【算法题】MapReduce编程,寻找二度人脉
这是某资讯APP公司的面试题,考察MapReduce的编程思想. 给定一个人脉关系的文件,从中找到二度人脉.比如给定如下的人脉关系, A B C D E B E F C G G H I J 应输出 A ...
最新文章
- grid - 使用相同的名称命名网格线和设置网格项目位置
- 图解在emu8086中学习汇编语言数字比较程序
- .net core 技术栈 网站收集
- SQL Server语句大全(增删改查数据、创建表、删除表、修改表)
- 约瑟夫环问题之猴子选大王
- 视频目标跟踪算法综述
- git 清除 另一个git进程似乎在这个仓库中运行。。。。。
- 雅虎前端优化的35条军规
- C++函数模板5分钟入门
- 查找算法——折半查找(JAVA)
- LeetCode 404. Sum of Left Leaves
- pandas中对列进行排序(单列/多列)/(升序/降序)/(多列升序,降序控制)
- accept 返回0_使用Vue3.0新特性造轮子 WidgetUI3.0 (Upload上传文件组件)
- django用sqlite跟mysql_django框架学习:九. django连接mysql,sqlite
- 接不住了,能撒手吗?
- ubutun下虚拟环境的配置
- HDU2594 Simpsons’ Hidden Talents 前缀与后缀转化成用s1去匹配s2
- 红警2 技术篇 地图基础ini 教程
- Struts2 DTD与XML文件编写
- 计算机网络物理层测试
热门文章
- 网络Sniffing原理
- 人像大片这么拍才像样:OPPO R15加入3D人像打光
- Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别
- Linux ---动态监控
- Android JSON解析并展现在listactivity实例
- 【Python基础】第十六篇 | 面向对象之高级篇
- 计算机营销专业,计算机营销专业自我评价
- html5猜颜色游戏,好看漂亮的html5网页特效学习笔记(3)_猜猜下一个颜色是什么?...
- GEP基因表达式编程
- 万万没想到,最简单的视频编辑软件竟然是知乎?!