劍指offer:面試題4
阿新 • • 發佈:2018-12-12
面試題4:如果直接每次遇到空格新增’%20’,那麼空格後面的數字就需要頻繁向後移動。遇到這種移動問題,我們可以嘗試先給出最終需要的長度,然後從後向前掃描,同時給定兩個指標來保證定位。逆向思維
編譯器:python3.5.2
程式設計環境:pycharm2018.1.2x64
''' 請實現一個函式,將一個字串中的空格替換成“%20”。 例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 ''' class Solution: # s 源字串 # 使用append一次遍歷即可替換 # 由於list的append是O(1)的時間複雜度,除了擴容所導致的時間損耗,該演算法複雜度為O(n) def replaceSpaceByAppend(self, s): string = list(s) stringReplace = [] for item in string: if item == ' ': stringReplace.append('%') stringReplace.append('2') stringReplace.append('0') else: stringReplace.append(item) return "".join(stringReplace) ############################################ # 建立新的字串進行替換 def replaceSpace1(self, s): tempstr = '' if type(s) != str: return for c in s: if c == ' ': tempstr += '%20' else: tempstr += c return tempstr ############################################ # 簡單程式碼替換 # 在Python中str型別是不可變的型別, 使用replace語句會生成一個新的str, 原始的s還是帶空格的str變數 def replaceSpace2(self, s): if type(s) != str: return return s.replace(' ', '%20') # 書中給的思路 # 判斷輸入型別的時候,isinstance必須首先判斷,因為如果輸入為integer的話,沒有len,就會直接報錯 def replaceSpace3(self, s): if not isinstance(s,str) or len(s) <= 0 or s == None: return "" spaceNum = 0 for i in s: if i == " ": spaceNum += 1 newStrLen = len(s) + spaceNum * 2 newStr = newStrLen * [None] indexOfOriginal, indexOfNew = len(s) - 1, newStrLen - 1 while indexOfNew >= 0 and indexOfNew >= indexOfOriginal: if s[indexOfOriginal] == ' ': newStr[indexOfNew-2:indexOfNew+1] = ['%', '2', '0'] indexOfNew -= 3 indexOfOriginal -= 1 else: newStr[indexOfNew] = s[indexOfOriginal] indexOfNew -= 1 indexOfOriginal -= 1 return "".join(newStr) s = 'we are happy' test = Solution() print(test.replaceSpaceByAppend(s)) print(test.replaceSpace1(s)) print(test.replaceSpace2(s)) print(test.replaceSpace3(s))