標籤:leetcode imp 公用首碼 result 迴文 [] port get 整數
LeetCode初級演算法的Python實現--字串
# 反轉字串def reverseString(s): return s[::-1]# 顛倒數字def reverse(x): if x < 0: flag = -2 ** 31 result = -1 * int(str(x)[1:][::-1]) if result < flag: return 0 else: return result else: flag = 2 ** 31 - 1 result = int(str(x)[::-1]) if result > flag: return 0 else: return result# 字串中的第一個唯一字元def firstUniqChar(s): d = {} for i in range(len(s)): d[s[i]] = d.get(s[i], 0) + 1 for i in range(len(s)): if d[s[i]] == 1: return i return -1# 有效字母異位詞def isAnagram(s, t): if len(t) != len(s): return False if len(set(t)) != len(set(s)): return False for ex in set(t): if s.count(ex) != t.count(ex): return False return True# 驗證迴文字串def isPalindrome(s): import re s = s.lower() newS = re.sub(r‘[^A-Za-z0-9]‘, "", s) if newS[::-1] == newS: return True else: return False# 字串轉整數(atoi)def myAtoi(str): import re if re.match(‘\s+‘, str) != None: a, b = re.match(‘\s+‘, str).span() str = str[b:] if str == ‘‘: return 0 flag = True if str[0] == ‘-‘: str = str[1:] flag = False elif str[0] == ‘+‘: str = str[1:] if re.match(‘\d+‘, str) != None: a, b = re.match(‘\d+‘, str).span() str = str[a:b] if flag == True: if int(str) > 2 ** 31 - 1: return 2 ** 31 - 1 return int(str) else: if -1 * int(str) < -2 ** 31: return -2 ** 31 return -1 * int(str) else: return 0# 實現 strStr() 函數。def strStr(haystack, needle): if len(needle) == 0: return 0 for i in range(len(haystack) - len(needle) + 1): if haystack[i:i + len(needle)] == needle: return i return -1# 數數並說def countAndSay(n): keyStr = ‘1‘ # 從1開始 for i in range(n - 1): # 迴圈n次 newStr = "" # 儲存新的字元 strList = [] # 迴圈一個字串下來擷取每個字元的個數 sList = [] # 相同字元的個數 flag = True for j in range(len(keyStr) - 1): # 迴圈字元的長度減一 flag表示預設最後一個字元和前面一個字元不同, sList.append(keyStr[j]) sList.append(1) if keyStr[j] == keyStr[j + 1]: # 如果當前位置的字元和下一個位置的字元相同 sList[1] += 1 flag = False else: strList.append(sList) # 不同的話 將上一個字元的情況儲存進列表 sList = [] flag = True if flag: # 如果最後一個字元和前一個字元不同,則將字元情況加入 strList.append([keyStr[-1], 1]) else: if sList != []: # 最後一串相同字元加入列表 strList.append(sList) for k in range(len(strList)): # 將列表的字元按順序取出 newStr = newStr + ‘‘ + str(strList[k][1]) newStr = newStr + ‘‘ + strList[k][0] keyStr = newStr return keyStr# 最長公用首碼def longestCommonPrefix(strs): if strs == []: return ‘‘ lenKey = len(strs[0]) key = 0 longest = 0 for i in range(1, len(strs)): if len(strs[i]) < lenKey: key = i lenKey = len(strs[i]) for i in range(len(strs[key])): flag = True for j in range(len(strs)): if strs[j][i] != strs[key][i]: flag = False if flag: longest += 1 else: break return strs[key][0:longest]
LeetCode初級演算法的Python實現--字串