首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-03 04:43
  • 2666
  • 7300
blog.csdn.net

目录

1、 双胞胎字符串:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502 

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信

        双胞胎字符串(Twin String)(也称为孪生字符串/双子串/最长重复子串)算法在计算机科学中有很多实用的应用场景,主要集中在文本处理、搜索优化、基因序列分析等领域。常见应用场景如下:

1、搜索引擎优化:在搜索引擎的索引构建过程中,可以使用双胞胎字符串来高效地存储和查找相似的文档或者关键词。例如,通过找出网页内容中的双胞胎段落,可以提高相关性和节省存储空间。

2、文本编辑距离:计算两个字符串之间的最小编辑距离是双胞胎字符串问题的一个变形,常用于自动纠错、拼写检查、搜索引擎排名等场景。

3、数据压缩和存储优化:通过识别并删除数据中的重复子串,双胞胎字符串算法可以帮助我们更有效地压缩数据,从而减少存储空间的占用。这对于大数据处理和云计算等场景尤为重要。

4、基因序列比对:在生物信息学中,双胞胎字符串算法可以帮助识别两个基因序列中的相似区域,这有助于研究基因的功能、进化关系以及疾病相关的遗传变异。

5、网页去重:对于大规模的网络爬取数据,双胞胎字符串算法可以帮助识别和去除重复的网页内容,提高索引和检索的效率。

6、版本控制系统:在代码版本控制软件如Git中,比较不同版本间的差异时,双胞胎字符串可以帮助识别哪些部分是相同的,以便更好地理解代码变更。

7、图像检索:在数字版权管理或图像视频检索中,可以利用双胞胎字符串的概念来识别和匹配相似的媒体内容。

8、推荐系统:在个性化推荐系统中,通过对用户行为数据进行分析,找出具有双胞胎性质的项目,可以帮助为用户提供更精准的推荐。

        这些应用展示了双胞胎字符串算法的广泛适用性,尤其是在需要处理大量文本数据和寻找相似性的问题中。

1、 双胞胎字符串:
1-1、Python:
  1. # 1.问题描述:
  2. # 给定两个字符串str1和str2,每次可以任意交换str1的奇数位或偶数位上的字符,即奇数位之间可以互换;偶数位之间可以互换;禁止奇偶交叉互换.是否可以实现str1=str2?
  3. # 2.问题示例:
  4. # 输入str1="myelsa",str2="elmysa",输出“Yes”;输入str1="myelsa",str2="ymelas",输出“No”.
  5. # 3.代码实现:
  6. class Solution:
  7. # 参数str1和str2: 一对字符串
  8. # 返回值: 字符串,表示能否根据规则转换
  9. def isTwin(self, str1, str2):
  10. if len(str1) != len(str2):
  11. return "No"
  12. # 初始化4个列表变量
  13. odd_str1 = []
  14. even_str1 = []
  15. odd_str2 = []
  16. even_str2 = []
  17. # 遍历 str1 和 str2 的每个字符
  18. for i in range(len(str1)):
  19. # 通过按位与运算,判断当前索引i是否为奇数
  20. if i & 1:
  21. # 如果是奇数,则将其放入奇数位数组
  22. odd_str1.append(str1[i])
  23. odd_str2.append(str2[i])
  24. else:
  25. # 如果是偶数,则将其放入偶数位数组
  26. even_str1.append(str1[i])
  27. even_str2.append(str2[i])
  28. # 对四个数组中的字符进行快速排序
  29. odd_str1.sort()
  30. odd_str2.sort()
  31. even_str1.sort()
  32. even_str2.sort()
  33. # 检查排序后的 odd_str1 和 odd_str2 是否相同
  34. for i in range(len(odd_str1)):
  35. if odd_str1[i] != odd_str2[i]:
  36. return "No"
  37. # 检查排序后的 even_str1 和 even_str2 是否相同
  38. for i in range(len(even_str1)):
  39. if even_str1[i] != even_str2[i]:
  40. return "No"
  41. # 如果所有检查都通过,则返回 "Yes"
  42. return "Yes"
  43. # 主函数
  44. if __name__ == '__main__':
  45. # 声明三个字符串变量:str1, str2, solution
  46. str1 = "myelsa"
  47. str2 = "ymelas"
  48. # 调用自定义函数Solution,并将返回结果赋值给变量solution.
  49. solution = Solution()
  50. # 按要求输出结果
  51. print("str1和str2分别是:", str1, str2)
  52. print("是否位双胞胎?结果为:", solution.isTwin(str1, str2))
  53. # 4.运行结果:
  54. # str1和str2分别是: myelsa ymelas
  55. # 是否位双胞胎?结果为: No
1-2、VBA:
  1. Rem 自定义函数,功能:双胞胎字符串
  2. Public Function isTwin(ByVal str1 As String, ByVal str2 As String) As String
  3. '定义四个动态数组,用于存储 str1 和 str2 的奇数位和偶数位字符
  4. Dim odd_str1() As String, even_str1() As String, odd_str2() As String, even_str2() As String
  5. '如果两个字符串的长度不同,则直接返回 "No" 并退出函数
  6. If Len(str1) <> Len(str2) Then
  7. isTwin = "No"
  8. Exit Function
  9. End If
  10. '根据字符串长度重新分配四个数组的大小
  11. ReDim odd_str1(Len(str1) \ 2 - 1)
  12. ReDim even_str1(Len(str1) \ 2 - 1)
  13. ReDim odd_str2(Len(str1) \ 2 - 1)
  14. ReDim even_str2(Len(str1) \ 2 - 1)
  15. '遍历 str1 和 str2 的每个字符
  16. Dim i As Long
  17. For i = 0 To Len(str1) - 1
  18. '判断当前索引 i 是否为奇数
  19. If i Mod 2 <> 0 Then
  20. '如果是奇数,则将其放入奇数位数组
  21. odd_str1(i \ 2) = mid(str1, i + 1, 1)
  22. odd_str2(i \ 2) = mid(str2, i + 1, 1)
  23. Else
  24. '如果是偶数,则将其放入偶数位数组
  25. even_str1(i \ 2) = mid(str1, i + 1, 1)
  26. even_str2(i \ 2) = mid(str2, i + 1, 1)
  27. End If
  28. Next i
  29. '对四个数组中的字符进行快速排序
  30. odd_str1 = QuickSort(odd_str1, LBound(odd_str1), UBound(odd_str1))
  31. odd_str2 = QuickSort(odd_str2, LBound(odd_str2), UBound(odd_str2))
  32. even_str1 = QuickSort(even_str1, LBound(even_str1), UBound(even_str1))
  33. even_str2 = QuickSort(even_str2, LBound(even_str2), UBound(even_str2))
  34. '检查排序后的 odd_str1 和 odd_str2 是否相同
  35. For i = LBound(odd_str1) To UBound(odd_str1)
  36. If odd_str1(i) <> odd_str2(i) Then
  37. isTwin = "No"
  38. Exit Function
  39. End If
  40. Next i
  41. '检查排序后的 even_str1 和 even_str2 是否相同
  42. For i = LBound(even_str1) To UBound(even_str1)
  43. If even_str1(i) <> even_str2(i) Then
  44. isTwin = "No"
  45. Exit Function
  46. End If
  47. Next i
  48. '如果所有检查都通过,则返回 "Yes"
  49. isTwin = "Yes"
  50. End Function
  51. Rem 自定义函数,功能:实现快速排序算法
  52. Function QuickSort(arr As Variant, low As Integer, high As Integer) As Variant
  53. Dim i As Integer
  54. Dim j As Integer
  55. Dim pivot As Variant
  56. Dim temp As Variant
  57. If low < high Then
  58. '选择基准值
  59. pivot = arr(low)
  60. '将比基准值小的移到左边,比基准值大的移到右边
  61. i = low + 1
  62. j = high
  63. Do While True
  64. Do While arr(i) < pivot And i < high
  65. i = i + 1
  66. Loop
  67. Do While arr(j) > pivot And j > low
  68. j = j - 1
  69. Loop
  70. '如果i和j没有交叉,则交换元素
  71. If i >= j Then
  72. Exit Do
  73. End If
  74. temp = arr(i)
  75. arr(i) = arr(j)
  76. arr(j) = temp
  77. Loop
  78. '将基准值放到正确的位置
  79. temp = arr(low)
  80. arr(low) = arr(j)
  81. arr(j) = temp
  82. '递归地对基准值左边和右边的子数组进行快速排序
  83. QuickSort arr, low, j - 1
  84. QuickSort arr, j + 1, high
  85. End If
  86. '返回排序后的数组
  87. QuickSort = arr
  88. End Function
  89. Rem 执行程序,功能:调用自定义函数isTwin,在立即窗口输出结果
  90. Sub TestRun()
  91. '声明三个字符串变量:str1, str2, result
  92. Dim str1 As String
  93. Dim str2 As String
  94. Dim result As String
  95. '为字符串str1,str2进行赋值
  96. str1 = "myelsa"
  97. str2 = "ymelas"
  98. '调用自定义函数isTwin,并将返回结果赋值给变量result.
  99. result = isTwin(str1, str2)
  100. '在立即窗口中,按要求输出结果.
  101. Debug.Print "str1和str2分别是:" & str1 & ", " & str2
  102. Debug.Print "是否位双胞胎?结果为:" & result
  103. End Sub
  104. 'str1和str2分别是: myelsa , ymelas
  105. '是否位双胞胎?结果为:No

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

2、相关文章:

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

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

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

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

Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502 
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信: 

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览60120 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://blog.csdn.net/ygb_1024/article/details/136817109"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top