ホームページ  >  記事  >  バックエンド開発  >  Python は、指定された文字列に対して最長の非繰り返し部分文字列を検索する機能を実装します。

Python は、指定された文字列に対して最長の非繰り返し部分文字列を検索する機能を実装します。

不言
不言オリジナル
2018-04-21 14:20:462225ブラウズ

この記事では、主に、Python のトラバーサル、並べ替え、計算、およびその他の文字列の関連操作スキルを含む、指定された文字列に対して最長の非繰り返し部分文字列を見つける Python の方法を紹介します。必要な友人は、この記事の例を参照してください。 Python は、指定された文字列に対して最長の非反復部分文字列を検索する機能を実装します。参考のために皆さんと共有してください。詳細は次のとおりです:

質問: 文字列が単一の文字で構成されている場合、その文字列内で「aaaaaaaaaaaaaa」などの最長の繰り返し部分列を見つけます。 " の場合、要件は満たされます。 前のフラグが重複する場合、戻って新しい部分文字列が前の文字列または前の文字列の部分文字列と同じかどうかを確認します。同じ場合は、部分文字列を記録し、次のようにカウントします。 1 処理が完了するまで

(2) スライディングウィンドウスライスの仕組みを利用して、すべてのスライスを生成し、それをカウントして処理します。 この記事では、主に 2 番目の方法を採用します。実装:

#!usr/bin/env python
#encoding:utf-8
'''''
__Author__:沂水寒城
功能:给定一个字符串,寻找最长重复子串
'''
from collections import Counter
def slice_window(one_str,w=1):
  '''''
  滑窗函数
  '''
  res_list=[]
  for i in range(0,len(one_str)-w+1):
    res_list.append(one_str[i:i+w])
  return res_list
def main_func(one_str):
  '''''
  主函数
  '''
  all_sub=[]
  for i in range(1,len(one_str)):
    all_sub+=slice_window(one_str,i)
  res_dict={}
  #print Counter(all_sub)
  threshold=Counter(all_sub).most_common(1)[0][1]
  slice_w=Counter(all_sub).most_common(1)[0][0]
  for one in all_sub:
    if one in res_dict:
      res_dict[one]+=1
    else:
      res_dict[one]=1
  sorted_list=sorted(res_dict.items(), key=lambda e:e[1], reverse=True)
  tmp_list=[one for one in sorted_list if one[1]>=threshold]
  tmp_list.sort(lambda x,y:cmp(len(x[0]),len(y[0])),reverse=True)
  #print tmp_list
  print tmp_list[0][0]
if __name__ == '__main__':
  print "脚本之家测试结果:"
  one_str='abcabcd'
  two_str='abcabcabd'
  three_str='bbbbbbb'
  main_func(one_str)
  main_func(two_str)
  main_func(three_str)

結果は以下の通り:

関連推奨事項:

Pythonは、指定された要件に従って数値を逆順に出力するを実装します

py次のメソッドを実装しますIDLE で複数行を入力する


以上がPython は、指定された文字列に対して最長の非繰り返し部分文字列を検索する機能を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。