摘要:沒(méi)有發(fā)現(xiàn)字符串的遍歷,一種向前,一種向后。遞歸函數(shù),利用返回結(jié)果的話,返回結(jié)果是遞歸到最后,結(jié)束遍歷以后,得到的結(jié)果才有效。
題目本質(zhì):通過(guò)將字符串A的字母之間的連續(xù)交換位置,達(dá)到 兩個(gè)字符串之間完全相同的情況
解析:通過(guò)將不相等處的字母,發(fā)現(xiàn)之后找到想等的,然后進(jìn)行位置替換。如此反復(fù)。
問(wèn)題在于慢,慢在于只要不相等,就會(huì)遍歷字符串之后所有的字符,大量重復(fù)的無(wú)意義的計(jì)算比較,所以將遍歷過(guò)的計(jì)算過(guò)的存在于memo字符串中間。
錯(cuò)誤:沒(méi)有找到效率低的問(wèn)題所在,在于比較過(guò)的無(wú)意義的比較。
沒(méi)有發(fā)現(xiàn)字符串的遍歷,一種向前,一種向后。 對(duì)付效率低,一種有效的方式就是緩存,將比較過(guò)的先儲(chǔ)存起來(lái)
應(yīng)用:緩存意識(shí),發(fā)現(xiàn)大量比較,可能有重復(fù),儲(chǔ)存。
遞歸函數(shù),利用返回結(jié)果的話,返回結(jié)果是遞歸到最后,結(jié)束遍歷以后,得到的結(jié)果才有效。
import sys class Solution: def kSimilarity(self, A, B): memo=dict() self.ans=sys.maxsize def helper(a,b): if len(a)!=len(b): return 0 elif a==b: return 0 elif (a,b) in memo: print(a,b,memo[(a,b)]) return memo[(a,b)] elif a[-1]==b[-1]: self.ans=min(self.ans,helper(a[:-1],b[:-1])) else: for i in range(0,len(a)-1): # print(a,b) if a[i]==b[-1]: # print(a[:i],b[-1],a[i+1:]) a_new=a[:i]+a[-1]+a[i+1:-1] # print(a_new,b[:-1]) self.ans=min(self.ans,1+helper(a_new,b[:-1])) # self.ans=1+helper(a_new,b[:-1]) # break # print(self.ans) memo[(a,b)]=self.ans return self.ans self.ans=helper(A,B) return self.ans if __name__=="__main__": A = "aabc" B = "abca" A="abbcac" B="abcbca" A="abccaacceecdeea" B="bcaacceeccdeaae" A="fffeaacbdbdafcfbbafb" B="abcbdfafffefabdbbafc" # A="abfdfacbd b d a f cfbbafb" # B="abcbdfaff f e f a bdbbafc" # A="abccab" # B="abccab" st=Solution() # out=st.kSimilarity(A,B) out=st.kSimilarity(A,B) print(out)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42347.html
摘要:前言平時(shí)最常用的莫過(guò)于和了,面試的時(shí)候也是問(wèn)答的常客。先不去管容量負(fù)載因子什么的,就是簡(jiǎn)單的使用也會(huì)遇到坑。元素經(jīng)常遇到的一個(gè)場(chǎng)景是遍歷然后找到合適條件的給刪除掉,比如刪除所有的偶數(shù)。文初的做法不報(bào)錯(cuò),但結(jié)果并不是我們想要的。 前言 平時(shí)最常用的莫過(guò)于ArrayList和HashMap了,面試的時(shí)候也是問(wèn)答的常客。先不去管容量、負(fù)載因子什么的,就是簡(jiǎn)單的使用也會(huì)遇到坑。 showImg...
摘要:由兩部分組成模板起始符,稱為沉音符反引號(hào),其內(nèi)容被識(shí)別為字符串模板。其實(shí)這是通過(guò)屬性操作中的結(jié)果,也就是說(shuō)屬性將對(duì)控制符進(jìn)行轉(zhuǎn)義從而實(shí)現(xiàn)按照普通字符輸出。的語(yǔ)法是緊跟在后面,兩者間不能有空格或制表符等。 1. Brief ES6(ECMAScript 6th edition)于2015年7月份發(fā)布,雖然各大瀏覽器仍未全面支持ES6,但我們可以在后端通過(guò)Node.js 0.12和io....
摘要:命令是二進(jìn)制工具集的一員,用于打印文件中可打印字符串,命令在對(duì)象文件或二進(jìn)制文件中查找可打印的字符串。打印字符序列的偏移量原文鏈接微信公眾號(hào)入門小站 strings 命令是二進(jìn)制工具集 GNU Binutils 的一員,用于打印文件中可打印字符串,strings命令在對(duì)象文件或二進(jìn)制文件中查找可打印的字符串。字...
摘要:用于對(duì)流進(jìn)行排序。三最終操作用于迭代流中的每個(gè)元素,并執(zhí)行相應(yīng)的操作。類類也是的新特性,用于有效解決問(wèn)題。與的功能一樣,不過(guò)接受一個(gè)函數(shù)式接口來(lái)生成對(duì)象為空則拋出異常與使用類似與使用類似這是一種級(jí)聯(lián)的方式,能夠解決方式的嵌套問(wèn)題。 Stream API Stream API是Java8的新特性,通常用于對(duì)集合進(jìn)行一些操作,可以幫助開發(fā)者寫出更高效、整潔的代碼。 一、Stream流的創(chuàng)建...
閱讀 3520·2021-11-25 09:43
閱讀 1279·2021-09-08 09:45
閱讀 2651·2021-09-07 09:59
閱讀 1515·2021-08-09 13:45
閱讀 3362·2019-08-30 15:54
閱讀 702·2019-08-29 18:35
閱讀 522·2019-08-29 17:18
閱讀 1004·2019-08-29 14:10