LeetCode-數組操作-Python<三>

來源:互聯網
上載者:User

標籤:簡單   blog   ati   ges   iss   最大   nbsp   string   int   

上一篇:LeetCode鏈表相加-Python<二>

 

以前沒怎麼做過演算法題,來來去去都是那些迴圈,所以先從數組簡單題開始做。

這兩天最大心得:

  • 總在邊界裡考慮不周到,導致錯誤
  • 做暈的時候,連變數名都跟參數重名了
  • 有時候,開始考慮的情況太粗糙

幸好,都找出了問題,並通過。下面貼貼代碼:

題目:無重複字元的最長子串

給定一個字串,找出不含有重複字元的最長子串的長度。

樣本:

給定 "abcabcbb" ,沒有重複字元的最長子串是 "abc" ,那麼長度就是3。

給定 "bbbbb" ,最長的子串就是 "b" ,長度是1。

給定 "pwwkew" ,最長子串是 "wke" ,長度是3。請注意答案必須是一個子串"pwke" 是 子序列  而不是子串。

通過代碼:

class Solution:    def lengthOfLongestSubstring(self, s):        """        :type s: str        :rtype: int        """               maxLen = 0        tmp = 0        d = {}        left = 0                for j in range(len(s)):                        if s[j] in d and d[s[j]]>=left:                left = d[s[j]]+1                        tmp = j - left + 1            maxLen = max(tmp,maxLen)            d[s[j]] = j   #哪怕重複也把索引更新到最新了                return maxLen
 題目:有效括弧

給定一個只包括 ‘(‘‘)‘‘{‘‘}‘‘[‘‘]‘ 的字串,判斷字串是否有效。

有效字串需滿足:

  1. 左括弧必須用相同類型的右括弧閉合。
  2. 左括弧必須以正確的順序閉合。

注意Null 字元串可被認為是有效字串。

樣本 1:

  • 輸入: "()"  ,輸出: true
  • 輸入: "()[]{}",輸出: true
  • 輸入: "(]",輸出: false
  • input:"([)]",output:false
  • input:"{[]}",output:true

通過代碼:

class Solution:        def isLeft(self,a):        if a==‘(‘:            return 1        elif a==‘[‘:            return 1        elif a==‘{‘:            return 1        elif a.isspace():            return 3        else:            return 2            def leftStr(self,a):        if a==‘)‘:            return ‘(‘        elif a==‘]‘:            return ‘[‘        elif a==‘}‘:            return ‘{‘        else:            print("匹配報錯")                def isValid(self, s):        """        :type s: str        :rtype: bool        """        stack = []               for i in range(len(s)):                      if self.isLeft(s[i])==1:                stack.append(s[i])            elif self.isLeft(s[i])==2:                               if 0>=len(stack):                    return False                else:                    tmp =stack.pop()                    print(tmp)                    left = self.leftStr(s[i])                    print(left)                    if tmp==left:                                               pass                    else:                        return False            else:                pass                if len(stack)>0:            return False        else:            return True                   

 

題目: 刪除數組重複項

給定一個排序數組,你需要在原地重複資料刪除出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。

樣本1:

給定數組 nums = [1,1,2], 函數應該返回新的長度 2, 並且原數組 nums 的前兩個元素被修改為 1, 2。 你不需要考慮數組中超出新長度後面的元素。

 樣本2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],函數應該返回新的長度 5, 並且原數組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。你不需要考慮數組中超出新長度後面的元素。

 通過代碼:

class Solution:    def removeDuplicates(self, nums):        """        :type nums: List[int]        :rtype: int        """              if (len(nums)==0):            return 0        i=0        for j in range(1,len(nums)):            if (nums[j]!=nums[j-1]):                 i=i+1                nums[i]=nums[j]                                               return i+1

 

要回家了,晚上再寫。。剩下幾題沒貼,解決思路關鍵點還沒寫。

LeetCode-數組操作-Python<三>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.