Python-算法编程100例-前缀和双指针(入门级)-最长的指定瑕疵度的元音子串

本文主要是介绍Python-算法编程100例-前缀和双指针(入门级)-最长的指定瑕疵度的元音子串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

元音字符为“aeiouAEIOU”

给定一个字符串,求字符串中满足指定瑕疵度的最长元音子串的长度。元音子串为字符串中开头和结尾都是元音字符的字符串,瑕疵度为子串中非元音字符的个数。

题目分析:

1、直接使用双指针,难度稍微有些大,边界不好处理。

2、使用前缀和+双指针,题目难度简化。

瑕疵度k=0
原始字符串asdbuiodevauufgh
元音字符到起始位置的瑕疵度000033304555000
元音字符的下标04568101112

代码:

# 前缀和+双指针-简单
# 双指针-中等
class Solution:def get_longest_flawed_vowel_substr_len(self, flaw: int, input_str: str) -> int:yy = "aeiouAEIOU"# 保存元音字符的下标y_idx = []# 保存对应下标的元音到初始位置的瑕疵个数flaw_count = [0] * len(input_str)# 前缀和,每个元音字符到首字母的瑕疵字符个数for i in range(len(input_str)):if input_str[i] in yy:y_idx.append(i)# 元音到起始位置的瑕疵个数flaw_count[i] = i - len(y_idx) + 1# 双指针left = 0right = 0flaw_max_len = 0while right < len(y_idx):cur_flaw = flaw_count[y_idx[right]] - flaw_count[y_idx[left]]if cur_flaw == flaw:flaw_max_len = max(flaw_max_len, y_idx[right] - y_idx[left] + 1)# 题目要求最长,有点贪心思想right += 1elif cur_flaw > flaw:left += 1else:right += 1return flaw_max_len

总结:

双指针的题目,如果指针边界不好处理,可以换种思路先通过前缀和等思想转化,为双指针处理提供简单的条件,这样题目就变得很简单了。

这篇关于Python-算法编程100例-前缀和双指针(入门级)-最长的指定瑕疵度的元音子串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087039

相关文章

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

SQL Server中,用Restore DataBase把数据库还原到指定的路径

restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' Go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'Ease

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain