• leetCode-739-每日温度 -- 5最长回文子串


    题目描述:

    请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

    例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

    思路:

    要求从前往后找第一次出现比当前值大的

    求解时,从后往前遍历,设置一个栈,如果栈为空,直接放入,最终结果中存放0,如果栈不空,当前值比栈顶小,求当前值和栈顶的索引之差,然后将索引放入栈顶,如果当前值比栈顶大,循环输出栈顶元素(因为要找出现第一次比当前值大的地方),这时还要判断栈是否空,如果栈空,将当前值直接放入,否则求当前值和栈顶的索引之差,再把当前值放入栈中

     1 class Solution:
     2     def dailyTemperatures(self, T: List[int]) -> List[int]:
     3         stack = []
     4         res = []
     5         for i in range(len(T)-1,-1,-1):
     6             if not stack:
     7                 stack.append(i)
     8                 res.append(0)
     9             else:
    10     
    11                 while stack and T[i]>=T[stack[-1]] : # 先判断栈是否空,再取栈中的值,否则下标越界
    12                     stack.pop()
    13                 if not stack:
    14                     res.append(0)
    15                 else:
    16                     res.append(stack[-1]-i)
    17                 stack.append(i)
    18         res.reverse() # 返回none
    19         #return [res[i] for i in range(len(res)-1,-1,-1)]
    20         return res

     最长回文子串

    讲的很清楚:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/

     

     1 class Solution:
     2     def longestPalindrome(self, s: str) -> str:
     3         n = len(s)
     4         dp = [[False]*n for _ in range(n) ]
     5         ans = ''
     6         for terminal in range(n):# 间隔
     7             for begin in range(n):
     8                 end = begin+terminal
     9                 if end>=n:
    10                     break
    11                 if terminal==0:
    12                     dp[begin][end] = True
    13                 elif terminal==1:
    14                     dp[begin][end] = (s[begin]==s[end])
    15                 else:
    16                     dp[begin][end] = (dp[begin+1][end-1] and s[begin]==s[end])
    17                 if dp[begin][end] and terminal+1>len(ans):
    18                     ans = s[begin:end+1]
    19         return ans

     

     

     1 class Solution:
     2     def expandAroundCenter(self, s, left, right):
     3         while left >= 0 and right < len(s) and s[left] == s[right]:
     4             left -= 1
     5             right += 1
     6         return left + 1, right - 1
     7 
     8     def longestPalindrome(self, s: str) -> str:
     9         start, end = 0, 0
    10         for i in range(len(s)):
    11             left1, right1 = self.expandAroundCenter(s, i, i)
    12             left2, right2 = self.expandAroundCenter(s, i, i + 1)
    13             if right1 - left1 > end - start:
    14                 start, end = left1, right1
    15             if right2 - left2 > end - start:
    16                 start, end = left2, right2
    17         return s[start: end + 1]
    18 
    19 作者:LeetCode-Solution
    20 链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/
    21 来源:力扣(LeetCode)
    22 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    玩4K必备知识:HDMI1.4、2.0、2.0a、2.0b接口参数对比【扫盲贴】
    Gradle配置最佳实践
    Android Studio 中安装 apk 被拆分成多个 slice,如何禁止?
    编译不同平台 设定
    编译找错
    Delphi 中内存映射对于大文件的使用
    linux——nmap端口扫描命令
    Android 使用 adb命令 远程安装apk
    插件编译 版本问题
    2019 opensuse linux Eclipse
  • 原文地址:https://www.cnblogs.com/shuangcao/p/13656981.html
Copyright © 2020-2023  润新知