最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python算法實(shí)現(xiàn)從字符串中提取重復(fù)子串

 更新時(shí)間:2025年10月22日 09:37:04   作者:東方佑  
在文本處理和數(shù)據(jù)分析中,經(jīng)常需要從字符串中提取重復(fù)出現(xiàn)的子串,本文將解析一個(gè)高效的Python算法,用于從給定字符串中提取長(zhǎng)度超過3的重復(fù)子串,需要的朋友可以參考下

算法概述

該算法包含兩個(gè)核心函數(shù):

  • replace_text() - 預(yù)處理字符串,替換低頻字符
  • compute_sub_string_list() - 提取重復(fù)子串

1. 預(yù)處理函數(shù):replace_text()

def replace_text(copy_text):
    replace_char = ""
    # 統(tǒng)計(jì)字符頻率
    for char, count in Counter(list(copy_text)).items():
        if count == 1:  # 只出現(xiàn)一次的字符
            if replace_char == "":
                replace_char = char  # 選擇第一個(gè)低頻字符作為替換字符
            else:
                # 用替換字符替換其他低頻字符
                copy_text = copy_text.replace(char, replace_char)
    
    if replace_char != "":
        # 分割字符串并篩選長(zhǎng)度>3的子串
        return [sub for sub, _ in Counter(copy_text.split(replace_char)).items() 
                if len(sub) > 3]
    else:
        return [copy_text]  # 沒有低頻字符時(shí)返回整個(gè)字符串

功能說明

  • 找出所有只出現(xiàn)一次的字符
  • 使用第一個(gè)低頻字符替換其他低頻字符
  • 用替換字符分割字符串
  • 返回長(zhǎng)度超過3的子串列表

2. 主處理函數(shù):compute_sub_string_list()

def compute_sub_string_list(text1):
    text_list = replace_text(text1)  # 預(yù)處理
    new_text_list = []

    for one_text in text_list:
        if len(one_text) == 4:
            # 處理長(zhǎng)度為4的子串
            if one_text in new_text_list:
                continue
            if text1.count(one_text) > 1:
                new_text_list.append(one_text)
        else:
            # 處理長(zhǎng)度>4的子串
            max_count = 0
            max_str = ""
            while len(one_text) > 4:
                sub_str = one_text[:3]
                up_str_count = 0
                up_str = ""
                
                # 擴(kuò)展子串并檢查重復(fù)性
                for char in one_text[3:]:
                    sub_str += char
                    if sub_str in new_text_list:
                        continue
                    str_count = text1.count(sub_str)
                    if str_count > 1:
                        if up_str_count <= str_count:
                            up_str_count = str_count
                            up_str = sub_str
                    else:
                        break  # 停止擴(kuò)展
                
                # 更新最佳子串
                if up_str:
                    if up_str_count > max_count:
                        max_count = up_str_count
                        max_str = up_str
                
                # 滑動(dòng)窗口
                one_text = one_text[1:]
            
            if max_str:
                new_text_list.append(max_str)
    
    return new_text_list

功能說明

  • 對(duì)預(yù)處理后的每個(gè)子串進(jìn)行處理
  • 對(duì)于長(zhǎng)度為4的子串直接檢查重復(fù)性
  • 對(duì)于更長(zhǎng)子串使用滑動(dòng)窗口 技術(shù):
    1. 從3字符前綴開始擴(kuò)展
    2. 記錄出現(xiàn)次數(shù)最多的有效子串
    3. 滑動(dòng)窗口繼續(xù)查找
  • 返回所有符合條件的重復(fù)子串

算法優(yōu)勢(shì)

  1. 高效預(yù)處理:通過替換低頻字符優(yōu)化后續(xù)處理
  2. 智能子串?dāng)U展:動(dòng)態(tài)擴(kuò)展子串直到不再重復(fù)
  3. 滑動(dòng)窗口 技術(shù):高效遍歷所有可能子串
  4. 頻率優(yōu)先:優(yōu)先選擇出現(xiàn)次數(shù)最多的子串

使用示例

if __name__ == '__main__':
    text = "abracadabraabracadabra"
    result = compute_sub_string_list(text)
    print("重復(fù)子串:", result)
    # 輸出: ['abra', 'racad', 'acada', 'cadab', 'adabr']

應(yīng)用場(chǎng)景

  • 文本模式識(shí)別
  • DNA序列分析
  • 代碼重復(fù)檢測(cè)
  • 自然語言處理中的短語提取
  • 數(shù)據(jù)壓縮算法

這個(gè)算法通過巧妙的預(yù)處理和滑動(dòng)窗口 技術(shù),高效地從字符串中提取有意義的重復(fù)模式,特別適合處理包含重復(fù)模式的長(zhǎng)文本數(shù)據(jù)。

def replace_text(copy_text):
    replace_text = ""
    for i in Counter(list(copy_text)).items():
        if i[1] == 1:
            if replace_text == "":
                replace_text = i[0]
            else:
                copy_text = copy_text.replace(i[0], replace_text)
    if replace_text != "":

        return [i[0] for i in Counter(copy_text.split(replace_text)).items() if len(i[0]) > 3]
    else:
        return [copy_text]


def compute_sub_string_list(text1):
    copy_text = text1
    text_list = replace_text(copy_text)

    new_text_list = []

    for one_text in text_list:
        if len(one_text) == 4:
            if one_text in new_text_list:
                continue
            if text1.count(one_text) > 1:
                new_text_list.append(one_text)
        else:
            max_count = 0
            max_str = ""
            while True:

                sub_str = one_text[:3]
                up_str_count = 0
                up_str = ""

                for s in one_text[3:]:
                    sub_str += s
                    if sub_str in new_text_list:
                        continue
                    str_count = text1.count(sub_str)
                    if str_count > 1:
                        if up_str_count <= str_count:
                            up_str_count = str_count
                            up_str = sub_str
                    else:
                        break
                if up_str:
                    if up_str_count > max_count:
                        max_count = up_str_count
                        max_str = up_str
                if len(one_text) > 4:

                    one_text = one_text[1:]
                else:
                    break
            new_text_list.append(max_str)
    return new_text_list


if __name__ == '__main__':
    print()

以上就是使用Python算法實(shí)現(xiàn)從字符串中提取重復(fù)子串的詳細(xì)內(nèi)容,更多關(guān)于Python算法字符串提取重復(fù)子串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Flask實(shí)現(xiàn)定制日志并輸出到文件

    Flask實(shí)現(xiàn)定制日志并輸出到文件

    這篇文章主要為大家學(xué)習(xí)介紹了Flask如何實(shí)現(xiàn)定制日志并輸出到文件,文中的示例代碼簡(jiǎn)介易懂,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-07-07
  • pytorch簡(jiǎn)介

    pytorch簡(jiǎn)介

    Pytorch是torch的python版本,是由Facebook開源的神經(jīng)網(wǎng)絡(luò)框架,專門針對(duì) GPU 加速的深度神經(jīng)網(wǎng)絡(luò)(DNN)編程。這篇文章給大家介紹pytorch的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2020-11-11
  • Django項(xiàng)目中用JS實(shí)現(xiàn)加載子頁面并傳值的方法

    Django項(xiàng)目中用JS實(shí)現(xiàn)加載子頁面并傳值的方法

    今天小編就為大家分享一篇Django項(xiàng)目中用JS實(shí)現(xiàn)加載子頁面并傳值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python中解包操作的性能實(shí)測(cè)與最佳實(shí)踐

    Python中解包操作的性能實(shí)測(cè)與最佳實(shí)踐

    這篇文章主要為大家詳細(xì)介紹了Python中解包操作的性能實(shí)測(cè)與最佳實(shí)踐,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • 使用Python中tkinter庫(kù)簡(jiǎn)單gui界面制作及打包成exe的操作方法(二)

    使用Python中tkinter庫(kù)簡(jiǎn)單gui界面制作及打包成exe的操作方法(二)

    這篇文章主要介紹了使用Python中tkinter庫(kù)簡(jiǎn)單gui界面制作及打包成exe的操作方法(二),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 基于Python實(shí)現(xiàn)人像雪景小程序

    基于Python實(shí)現(xiàn)人像雪景小程序

    這篇文章主要介紹了通過Python實(shí)現(xiàn)的人像雪景小程序,小程序還會(huì)自動(dòng)生成每一幀雪花飄落的圖片,跟GIF動(dòng)態(tài)雪花人像圖,還不用自己錄制視頻看效果。感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • Python使用DrissionPage實(shí)現(xiàn)自動(dòng)化處理的簡(jiǎn)單入門指南

    Python使用DrissionPage實(shí)現(xiàn)自動(dòng)化處理的簡(jiǎn)單入門指南

    在Python自動(dòng)化領(lǐng)域,Selenium和Requests是兩個(gè)常用工具,DrissionPage巧妙結(jié)合了兩者優(yōu)勢(shì),本文將帶你從零開始,用10分鐘掌握DrissionPage的核心用法,希望對(duì)大家有所幫助
    2026-01-01
  • numpy中np.sort返回索引的具體使用

    numpy中np.sort返回索引的具體使用

    本文主要介紹了使用numpy中np.sort函數(shù)返回索引的詳細(xì)解釋和使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    django是python語言的一個(gè)web框架,功能強(qiáng)大。配合一些插件可為web網(wǎng)站很方便地添加搜索功能。下面通過本文給大家分享Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能,感興趣的朋友一起看看吧
    2017-08-08
  • 使用Python的datetime庫(kù)處理時(shí)間(RPA流程)

    使用Python的datetime庫(kù)處理時(shí)間(RPA流程)

    datetime 是 Python 處理日期和時(shí)間的標(biāo)準(zhǔn)庫(kù)。這篇文章主要介紹了使用Python的datetime庫(kù)處理時(shí)間(RPA流程),需要的朋友可以參考下
    2019-11-11

最新評(píng)論

六安市| 宣汉县| 贡山| 海阳市| 三穗县| 江西省| 新乡县| 噶尔县| 惠安县| 昌黎县| 新郑市| 河曲县| 嵊泗县| 旬邑县| 富阳市| 兴宁市| 武平县| 沙坪坝区| 巴彦县| 乌审旗| 神农架林区| 襄垣县| 沙洋县| 长治市| 三明市| 鹤庆县| 正定县| 伊吾县| 禹州市| 双柏县| 南汇区| 莲花县| 沙洋县| 寿宁县| 上犹县| 巢湖市| 浦江县| 辽阳县| 石屏县| 乐业县| 建阳市|