python實現對變位詞的判斷方法_python

來源:腳本之家  責任編輯:小易  

/*判斷兩個字符串是否是2113變位5261詞。變位詞:指組成兩個詞的字符4102相同,只是位置不同*///方法1、對兩1653個字符串排序,如果是變位詞則排序后相等,時間復雜度NlogN//方法2、開辟一個256大小的整型數組來統計第一個詞的每個字符出現的次數,掃描第一個詞,相應字符出現的次數加一;掃描第二個詞,相應字符出現的次數減一;如果最后數組256個全部為0,則為變位詞。C++實現bool is_anagram(const string &s1,const string &s2){int count[256];memset(count,0,sizeof(count));int len1 = s1.length(), len2 = s2.length();if(len1==0 || len2==0 || len1!=len2)return false;else{for(int i=0;i<len1;i++){++count[s1[i]];--count[s2[i]];}for(int j=0;j<256;j++){if(count[j]!=0)return false;}return true;}}Python實現def is_anagram(s1,s2):length1 = len(s1)length2 = len(s2)count = [0]*256if length1==0 or length2==0 or length1!=length2:return Falseelse:for i in range(0,length1):++count[ord(s1[i])]--count[ord(s2[i])]for j in range(0,256):if count[j]!=0:return Falsereturn Truewww.13333515.buzz防采集請勿采集本網。

Python實現對變位詞的判斷,供大家參考,具體內容如下

def login(username,password): return username='abc' and password='123'

什么是變位詞呢?即兩個單詞都是由相同的字母組成,而各自的字母順序不同,譬如python和typhon,heart和earth。

思考一下正則表達式。

變位詞的判斷

python的string對象沒有contains方法,不用使用string.contains的方法判斷是否包含子字符串,但是python有更簡單的方法來抄替換contains函數。方法1:使用zhidao in 方法實現contains的功能:

既然我們知道了變位詞的定義,那么接下來就是實現對兩個單詞是否是變位詞進行判斷了,以下展示變位詞判斷的幾種解法:

這是我之前在excel中比較兩組不同數據的代碼,修改一下完全可以滿足你的要求。coding:utf-8-*- import xlrd import xlwt from xlutils.copy import copy import os,time import operator path=r

1、逐字檢查

代碼如下: coding=utf-8 def is_prime(n): for j in range(2,n): if n%j=0: return False return True if_name_='_main_': try: num=int(input('請輸入一個大于1的正整數:')) if num raise

將單詞1中的所有字符逐個到單詞2中檢查是否存在對應字符,存在就標記

實現:將詞2中存在的對應字符設置None,由于字符串是不可變類型,需要先將詞2字符復制到列表中

時間復雜度:O(n^2)

def anagramSolution1(s1,s2): alist = list(s2) # 復制s2 pos1 = 0 stillok = True while pos1 < len(s1) and stillok: # 循環s1的所有字符 pos2 = 0 found = False # 初始化標識符 while pos2 < len(alist) and not found: # 與s2的字符逐個對比 if s1[pos1] == alist[pos2]: found = True else: pos2 = pos2 + 1 if found: alist[pos2] = None # 找到對應,標記 else: stillok = False # 沒有找到,失敗 pos1 = pos1 + 1 return stillokprint(anagramSolution1('python','typhon'))

2、排序比較

實現:將兩個字符串都按照字母順序重新排序,再逐個比較字符是否相同

時間復雜度:O(n log n)

def anagramSolution2(s1,s2): alist1 = list(s1) alist2 = list(s2) alist1.sort() # 對字符串進行順序排序 alist2.sort() pos = 0 matches = True while pos < len(s1) and matches: if alist1[pos] == alist2[pos]: # 逐個對比 pos = pos + 1 else: matches = False return matchesprint(anagramSolution2('python','typhon'))

3、窮盡法

將s1的字符進行全排列,再查看s2中是否有對應的排列

時間復雜度為n的階乘,不適合作為解決方案

4、計數比較

將兩個字符串的字符出現的次數分別統計,進行比較,看相應字母出現的次數是否一樣

時間復雜度:O(n),從時間復雜度角度而言是最優解

def anagramSolution4(s1,s2): c1 = [0] * 26 c2 = [0] * 26 for i in range(len(s1)): pos = ord(s1[i]) - ord('a') # ord函數返回字符的Unicode編碼,此語句可以將字符串中的字母轉換成0-25的數字 c1[pos] = c1[pos] + 1 # 實現計數器 for i in range(len(s2)): pos = ord(s2[i]) - ord('a') c2[pos] = c2[pos] + 1 j = 0 stillOK = True while j < 26 and stillOK: # 計數器比較 if c1[j] == c2[j]: j = j + 1 else: stillOK = False return stillOKprint(anagramSolution4('python','typhon'))

總結

從以上幾種解法可以看出,要想在時間上獲得最優就需要犧牲空間存儲,因此沒有絕對的最優解,只有在一定的平衡下,才能找到一個問題相對穩定的解決方案。

前幾天偶爾的有朋友問python怎么判斷素數的方法,在網上查了查,總結了python腳本判斷一個數是否為素數的幾種方法:望采納!內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • golang字符串變位詞示例詳解
  • c++變位詞問題分析
  • 零基礎寫python爬蟲之urllib2使用指南
  • django drf圖片路徑問題的解決方法
  • python簡單判斷序列是否為空的方法
  • django搭建項目配置環境和創建表過程詳解
  • python使用tkinter庫實現五子棋游戲
  • django中使用group_by的方法
  • pytorch之保存讀取模型實例
  • python3調用微信企業號api發送文本消息代碼示例
  • pycharm安裝第三方庫如requests的圖文教程
  • sanic框架路由用法實例分析
  • python實現判斷一個數是不是素數
  • 數組字符串系列之:判斷兩個字符串是否是變位詞
  • python實現給定一個列表判斷里面是否有重復元素
  • 求Python 代碼:實現質數的判斷
  • python如何用函數編程設計函數,實現用戶名和密碼的判斷
  • Python 我輸入一個詞語,判斷一段文字中有沒有這個詞語?
  • 用python語言,如何判斷一段字符串中是否包含指定的字符串
  • 使用Python實現比較倆個文件的數據,不同的存在另一個文件里
  • python編寫程序,輸入一個大于1的正整數,判斷是否素數并輸出結果.
  • 用python實現:接受用戶的輸入的5個值,將他們存入列表或元組,輸出他們的和。要有具體的代碼。
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全vbsdos/bathtahtcpythonperl游戲相關vba遠程腳本coldfusionruby專題autoitseraphzonepowershelllinux shellluagolangerlang其它首頁golang字符串變位詞示例詳解c++變位詞問題分析零基礎寫python爬蟲之urllib2使用指南django drf圖片路徑問題的解決方法python簡單判斷序列是否為空的方法django搭建項目配置環境和創建表過程詳解python使用tkinter庫實現五子棋游戲django中使用group_by的方法pytorch之保存讀取模型實例python3調用微信企業號api發送文本消息代碼示例pycharm安裝第三方庫如requests的圖文教程sanic框架路由用法實例分析python入門教程 超詳細1小時學會python 列表(list)操作方法詳解python 元組(tuple)操作詳解python 字典(dictionary)操作詳解pycharm 使用心得(一)安裝和首python strip()函數 介紹python 中文亂碼問題深入分析python中使用xlrd、xlwt操作excepython科學計算環境推薦——anacpython逐行讀取文件內容的三種方python基于property()函數定義屬性記一次pyinstaller打包pygame項目為exe的python計算已經過去多少個周末的方法python繪制全球疫情變化地圖的實例代碼python中棧的原理及實現方法示例解析python的縮進規則的使用python中的urllib模塊使用詳解python實現簡單的文件傳輸與mysql備份的腳python中input和raw_input的一點區別深入解析python編程中super關鍵字的用法
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果