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

目录

1、连续字符段索引:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客

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

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

        连续字符段索引(Index of Consecutive Character Segments)在实际应用中具有多种场景。常见的应用场景有:

1、文本分析:在文本处理和分析中,连续字符段索引可以用于识别重复的字符序列或模式。这些模式可能对于理解文本的结构、风格或特定含义至关重要。例如,在诗歌或歌词中,连续字符段可能表示押韵或节奏。

2、密码学和安全:在密码分析和安全领域,连续字符段可能指示加密密钥的模式或弱点。通过分析文本中连续字符段的分布和频率,密码学家可以推断出加密算法的某些特性或寻找潜在的解密方法。

3、数据压缩:在数据压缩算法中,连续字符段可以用作压缩数据的依据。通过识别并编码连续字符段,可以减少数据的大小,从而提高存储和传输效率。

4、生物信息学:在生物信息学和基因组学研究中,连续字符段索引可以用于识别DNA或RNA序列中的重复模式。这些模式可能与基因功能、疾病关联或进化过程有关。

5、搜索引擎优化:在搜索引擎优化(SEO)中,连续字符段可以帮助识别网页内容中的关键词和短语。通过优化这些连续字符段的出现和分布,可以提高网页在搜索引擎结果中的排名。

6、文本编辑器和IDE:在文本编辑器和集成开发环境(IDE)中,连续字符段索引可以用于实现自动完成、代码高亮或错误检查等功能。通过分析代码中的连续字符段,这些工具可以提供更智能的编程体验。

7、自然语言处理:在自然语言处理(NLP)中,连续字符段可以用于识别文本中的重复单词或短语,这在词性标注、命名实体识别或情感分析等任务中可能有所帮助。

8、数据清洗和预处理:在数据清洗和预处理阶段,连续字符段可能被视为噪声或无效数据。通过检测和删除这些连续字符段,可以提高数据的质量和准确性,为后续的数据分析提供更好的基础。

        总之,连续字符段索引文本处理、密码学、数据压缩、生物信息学、搜索引擎优化、文本编辑器和自然语言处理等多个领域都有广泛的应用。通过利用这些索引,我们可以更好地理解、分析和优化文本数据。

 

1、连续字符段索引:
1-1、Python:
# 1.问题描述:
# 给定一个字符串,若字符串中存在连续出现≥3次的字符,则以二维数组的形式输出所有这样字符索引的起始位和终止位形成的列表.
# 2.问题示例:
# 输入str1 = "mymyelsaaawwwonderfulllly",则输出[[7, 9], [10, 12], [20, 23]],
# 即a的起始位为7,终止位为9;W的起始位为10,终止位为12;l的起始位为20,终止位为23.
# 3.代码实现:
class Solution:
    '''
    定义了一个函数TwitchWords,它接受一个字符串作为参数,并返回一个二维数组,其中包含所有长度至少为3的连续相同字符子串索引的起始位和终止位.
    参数str1: 字符串
    返回值: 二维数组,即所有出现3次及以上字符子串的首末索引值列表,组成的二维数组.
    '''
    def twitchWords(self, str1):
        # 检查输入字符串长度,若>3则无需继续处理,直接返回空列表
        if len(str1) < 3:
            return []
        # 初始化当前字符、连续字符序列的起始索引和结果列表
        current_char = str1[0]
        start_index = 0
        result = []
        # 遍历字符串(从第二个字符开始)
        for i in range(1, len(str1)):
            # 如果发现字符变化
            if str1[i] != current_char:
                # 检查是否形成了长度≥3的连续字符序列
                if i - start_index >= 3:
                    # 将该连续字符序列的起始和结束索引添加到结果列表中
                    result.append([start_index, i - 1])
                # 更新当前字符和连续字符序列的起始索引
                current_char = str1[i]
                start_index = i
        # 检查字符串末尾是否还有未处理的连续字符序列
        # 注意:这里直接使用len(str1) - 1作为结束索引,因为序列的结束索引是索引值减1
        if len(str1) - start_index >= 3:
            result.append([start_index, len(str1) - 1])
        # 返回包含所有长度≥3的连续字符序列的起始和结束索引的结果列表
        return result
# 主函数
if __name__ == '__main__':
    # 输入字符串
    str1 = "mymyelsaaawwwonderfulllly"
    # 创建Solution对象
    solution = Solution()
    # 调用twitchWords方法并打印结果
    print("输入为:", str1)
    print("输出为:", solution.twitchWords(str1))
# 4.运行结果:
# 输入为: mymyelsaaawwwonderfulllly
# 输出为: [[7, 9], [10, 12], [20, 23]]
1-2、VBA:
Rem 自定义函数,功能:连续字符段索引
Function TwitchWords(ByVal str1 As String) As Variant
    ' 声明变量i,用于循环遍历字符串str1
    Dim i As Long
    ' 声明变量currentChar,用于存储当前正在检查的字符
    Dim currentChar As String
    ' 声明变量startIndex,用于存储当前字符序列的起始索引
    Dim startIndex As Long
    ' 声明动态数组result,用于存储所有符合条件的字符序列的起始和终止索引
    Dim result() As Variant
    ' 声明变量resultIndex,用于追踪result数组中的当前位置
    Dim resultIndex As Long
  
    ' 初始化结果数组,使其包含一个元素(尽管这个元素将不会被使用)
    ' ReDim用于重新定义数组的大小
    ' 这里result(0)表示数组有一个元素,但因为我们从resultIndex = 0开始,所以实际上是从result(1)开始存储数据
    ReDim result(0) As Variant
    resultIndex = 0
    ' 检查输入字符串str1的长度是否小于3
    ' 如果是,则直接返回一个空数组(即result的当前状态)
    If Len(str1) < 3 Then
        TwitchWords = result
        Exit Function
    End If
    ' 设置currentChar为str1的第一个字符
    currentChar = mid(str1, 1, 1)
    ' 设置startIndex为1,因为VBA中字符串的索引是从1开始的
    startIndex = 1
    ' 循环从str1的第二个字符开始,直到字符串的末尾
    For i = 2 To Len(str1)
        ' 检查当前字符是否与currentChar不同
        If mid(str1, i, 1) <> currentChar Then
            ' 如果不同,并且从startIndex到i-1的字符数至少为3
            ' 则说明找到了一个符合条件的字符序列
            If i - startIndex >= 3 Then
                ' 扩大result数组以容纳新元素
                ' ReDim Preserve用于保留数组中的现有数据
                ReDim Preserve result(resultIndex)
                ' 将新找到的字符序列的起始和终止索引(减1以符合VBA的索引规则)存储到result数组中
                ' 注意:这里使用Array函数创建一个新的数组,并将其作为result数组的一个元素
                result(resultIndex) = Array(startIndex - 1, i - 2)
                ' 更新resultIndex以指向下一个位置
                resultIndex = resultIndex + 1
            End If
            ' 更新currentChar和startIndex为当前字符和索引
            currentChar = mid(str1, i, 1)
            startIndex = i
        End If
    Next i
    ' 检查最后一个字符序列是否也满足条件(至少包含三个连续相同字符)
    If Len(str1) - startIndex + 1 >= 3 Then
        ' 如果是,则扩大result数组并添加最后一个序列的起始和终止索引
        ReDim Preserve result(resultIndex)
        result(resultIndex) = Array(startIndex - 1, Len(str1) - 1)
        ' 更新resultIndex
        resultIndex = resultIndex + 1
    End If
    ' 返回result数组,它现在包含了所有符合条件的字符序列的起始和终止索引
    TwitchWords = result
End Function
Rem 执行程序,功能:调用自定义函数TwitchWords,在立即窗口中输出结果.
Sub TestRun()
    Dim str1 As String  ' 声明一个字符串变量str1,用于存储测试字符串
    Dim result As Variant  ' 声明一个Variant类型的变量result,用于存储TwitchWords函数的返回值
    Dim i As Long  ' 声明一个长整型变量i,用于循环遍历result数组
        
    str1 = "mymyelsaaawwwonderfulllly"  ' 将测试字符串"mymyelsaaawwwonderfulllly"赋值给str1
    result = TwitchWords(str1)  ' 调用TwitchWords函数,并将str1作为参数传入,将返回值存储在result变量中
        
    Debug.Print "输入为:" & str1  ' 使用Debug.Print在VBA的调试窗口中输出输入字符串
    Debug.Print "输出为:"  ' 使用Debug.Print输出一个提示信息,表明接下来将输出处理结果
        
    ' 使用For循环遍历result数组,LBound和UBound函数分别返回数组的最小和最大索引
    For i = LBound(result) To UBound(result)
        ' 对于result数组中的每一个元素(也是一个数组),输出其第一个和第二个元素(即起始和结束索引)
        Debug.Print "(" & result(i)(0) & ", " & result(i)(1) & ")"
    Next i
End Sub
'结果输出:
'输入为: mymyelsaaawwwonderfulllly
'输出为:
'(7, 9)
'(10, 12)
'(20, 23)

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

2、相关文章:

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

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

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

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

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

版权声明:本文为博主作者:神奇夜光杯原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/ygb_1024/article/details/137319533

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2024年4月10日
下一篇 2024年4月10日

相关推荐