Python-VBA编程500例-022(入门级)

2024-03-28 13:36
文章标签 python 编程 vba 500 入门级 022

本文主要是介绍Python-VBA编程500例-022(入门级),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最长AB子串(Longest AB Alternating Substring)(或称为最长XY出现次数相同的子字符串)这个问题看似是一个比较抽象的编程问题,但在实际应用场景中,它可以用来解决一系列涉及平衡性和重复模式的实际问题。常见应用场景有:

1、DNA或RNA序列分析:在生物信息学中,最长AB子串问题可以用于分析DNA或RNA序列中特定碱基对的平衡性。例如,在寻找可能的蛋白质编码区域时,需要分析序列中碱基对的出现次数和平衡性。

2、信号处理:在信号处理领域,特别是当涉及到具有周期性或重复性模式的信号时,最长AB子串算法可以用于识别和分析这些模式。

3、网络通信协议:在网络通信中,特定的数据帧或数据包可能需要满足一定的格式要求,包括某些字段的出现次数和顺序。最长AB子串算法可以用于验证这些要求是否得到满足。

4、编码与解码:在一些编码和解码算法中,可能需要确保编码后的字符串中特定字符或字符组合的出现次数保持平衡。最长AB子串算法可以用于验证和优化这些编码策略。

5、文本分析:在自然语言处理或文本挖掘中,最长AB子串问题可能用于分析文本中特定单词或短语的出现频率和分布,从而揭示文本的结构或主题。

6、数据压缩:在数据压缩算法中,寻找最长AB子串可以帮助识别重复的模式,从而更有效地压缩数据。

7、编程竞赛与算法训练:这个问题也是算法竞赛和编程训练中常见的题目,用于检验选手的算法设计和优化能力。

总的来说,最长AB子串问题虽然看似简单,但在实际应用中具有广泛的用途。它涉及到模式识别、平衡性分析、优化等多个方面,对于解决一系列实际问题具有重要意义。

 

1、最长AB子串:
1-1、Python:
# 1.问题描述:
# 给出一个只由字母X和Y组成的字符串str1,找一个最长的子串,要求这个子串里面X和Y的数目相等,并输出该子串的长度.
# 2.问题示例:
# 输入str1= "XYXXXYYYX",输出8.
# 3.代码实现:
class Solution:# 参数str1: 待查字符串# 返回值answer: 整数,即最大字符串的长度def get_substring_longest(self, str1):# 初始化一个变量answer,用于记录最长子串的长度,初始值为0answer = 0# 初始化一个列表arr1,长度为str1的长度,所有元素初始值为0arr1 = [0] * len(str1)# 初始化一个空字典sets,用于存储差值与对应位置的关系sets = {}# 判断str1的第一个字符是否为'X'if str1[0] == 'X':# 如果是'X',则arr1的第一个元素设为1,sets中存储1对应的位置为0arr1[0], sets[1] = 1, 0else:# 如果不是'X',则arr1的第一个元素设为-1,sets中存储-1对应的位置为0arr1[0], sets[-1] = -1, 0# 遍历str1的字符,从第二个字符开始(索引为1)for i in range(1, len(str1)):# 根据当前字符是'X'还是'Y',设置diff的值为1或-1diff = 1 if str1[i] == 'X' else -1# 更新arr1的当前位置的值,为前一个位置的值加上diffarr1[i] = arr1[i - 1] + diff# 如果arr1的当前位置的值为0,表示当前位置之前的'X'和'Y'数量相等if arr1[i] == 0:# 更新answer为当前位置加1,因为子串的起始位置到当前位置(包含当前位置)的长度是i+1answer = i + 1# 跳过当前循环的剩余部分,继续下一次循环continue# 如果arr1的当前位置的值在sets中已经存在if arr1[i] in sets:# 更新answer为当前答案与当前位置与sets中对应位置之差的较大值answer = max(answer, i - sets[arr1[i]])else:# 如果arr1的当前位置的值不在sets中,则将其加入sets,并记录位置sets[arr1[i]] = i# 返回最长子串的长度return answer
# 主函数
if __name__ == '__main__':# 定义一个字符串str1str1 = "XYXXXYYYX"# 实例化Solution类solution = Solution()# 打印字符串str1print("XY字符串:", str1)# 调用get_substring_longest方法,并打印最长XY出现次数相同的子字符串长度print("最长XY出现次数相同的子字符串长度:", solution.get_substring_longest(str1))
# 4.运行结果:
# XY字符串: XYXXXYYYX
# 最长XY出现次数相同的子字符串长度: 8
1-2、VBA:
Rem 自定义函数,功能:最长AB子串
Function GetSubstringLongest(str1 As String) As IntegerDim answer As IntegerDim arr1() As IntegerDim sets As ObjectDim i As IntegerDim diff As IntegerDim key As Variant' 初始化answer为0answer = 0' 创建数组arr1并初始化为0ReDim arr1(1 To Len(str1))' 初始化sets为Scripting.Dictionary对象,用于存储键值对Set sets = CreateObject("Scripting.Dictionary")' 设置第一个字符的arr1值和sets中的键值对If left(str1, 1) = "X" Thenarr1(1) = 1sets.Add 1, 1Elsearr1(1) = -1sets.Add -1, 1End If' 遍历字符串的每个字符For i = 2 To Len(str1)' 根据当前字符设置diff的值diff = IIf(mid(str1, i, 1) = "X", 1, -1)' 更新arr1的当前位置的值arr1(i) = arr1(i - 1) + diff' 如果arr1的当前位置为0,则更新answerIf arr1(i) = 0 Thenanswer = iEnd If' 检查sets中是否已存在当前arr1的值If sets.Exists(arr1(i)) Then' 更新answer为当前答案与当前位置与sets中对应位置之差的较大值answer = Application.WorksheetFunction.Max(answer, i - sets(arr1(i)))Else' 如果arr1的当前值不在sets中,则将其加入setssets.Add arr1(i), iEnd IfNext i' 返回最长子串的长度GetSubstringLongest = answer
End Function
Rem 执行程序,功能:调用自定义函数GetSubstringLongest,在立即窗口中输出结果
Sub TestRun()' 声明一个变量 str1,类型为 String,用于存储待查字符串Dim str1 As String' 声明一个变量 result,类型为 Integer,用于存储找到的最大子串长度Dim result As Integer' 将给定的字符串 "XYXXXYYYX" 分配给 str1str1 = "XYXXXYYYX"' 调用 GetSubstringLongest 函数,传入 str1,将返回的结果存储到 result 中result = GetSubstringLongest(str1)' 使用 Debug.Print 语句打印相关信息,输出最长XY出现次数相同的子字符串长度Debug.Print "最长XY出现次数相同的子字符串长度:" & result
End Sub
'结果输出:
'最长XY出现次数相同的子字符串长度:8

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,在立即窗口中输出结果。

2、相关文章:

2-1、Python-VBA编程500例-019-02(入门级) 

2-2、Python-VBA编程500例-020-01(入门级) 

2-3、Python-VBA编程500例-020-02(入门级)

2-4、Python-VBA编程500例-021(入门级)

Myelsa的Python算法之旅(高铁直达):https://myelsa1024.blog.csdn.net/article/details/136889623?spm=1001.2014.3001.5502
欢迎访问个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

这篇关于Python-VBA编程500例-022(入门级)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念