leetcode自测答题——2019-01-13

emmmm决定从今天开始刷leetcode。。。在这里记录一下我的答题思路和结果吧。可能不是最棒的。如果大家有更好的解题思路请多多指教~

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

原题:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
在这里插入图片描述

这里利用了窗口滑动的效果。当已经确定[i, j]中没有重复元素的时候,就可以直接看j+1在不在[i-1, j]中就可以了。最后不要忘记,如果字符串长度为1的情况。

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        no_same = []
        i = 0
        max_len = 0
        while i < len(s):
            if s[i] not in no_same:
                no_same.append(s[i])
                i += 1
            else:
                max_len = max([max_len, len(no_same)])
                no_same.pop(0)
        max_len = max([max_len, len(no_same)])
        return max_len

寻找两个有序数组的中位数

原题:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/

在这里插入图片描述
这里我用了最简单的合并,排序。但是时间复杂度是O(m+n),并不符合题目= =。(待完成)

class Solution:
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        nums1.extend(nums2)
        new = sorted(nums1)
        if len(new) % 2 == 0:
            i = (0 + len(new)) // 2
            middle = (new[i-1] + new[i]) / 2
        else:
            i = (0 + len(new) - 1) // 2
            middle = new[i]
        return middle

最长回文子串

原题:https://leetcode-cn.com/problems/longest-palindromic-substring/

在这里插入图片描述

回文,说简单了就是顺序读和倒序读是一样的。或者说,从中心开始,依次往外依次扩散的字符都相同。因此,以这个为思路,从中心出发。但是,字符串长度可能是奇数,也可能是偶数。因此需要考虑这两种情况,以下是图解:

在这里插入图片描述

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        longest_str = str()
        for i in range(len(s)):
            lstr = get_around_string(s, i, i)
            rstr = get_around_string(s, i, i+1)
            longe_str = lstr if len(lstr) >= len(rstr) else rstr
            longest_str = longe_str if len(longe_str) >= len(longest_str) else longest_str
        return longest_str

def get_around_string(s, left, right):
    while left >= 0 and right < len(s) and s[left] == s[right]:
        left -= 1
        right += 1
    left += 1
    return s[left: right]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值