您的位置:首页 > 理论基础 > 数据结构算法

『LeetCode』练习第三弹_算法5题

2017-05-10 09:19 405 查看

5. Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.

Example:

Input: "cbbd"

Output: "bb"


class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
s = list(s)
l = len(s)
num = []
for i in range(l):
for j in range(i,l+1):   # range前闭后开,切片也是前闭后开,所以不+1会丢值
tem = s[i:j]
tem.reverse()        # list才有reverse操作,且无return,直接修改原list
# print(i, '&',j)
# print(s[i:j],'&',tem)
if s[i:j]==tem:
num.append(len(s[i:j]))
if len(s[i:j])==max(num):
res = s[i:j]
return ''.join(res)          # list转字符串的操作


结果:在一个很长的测试上超时了~~我已经习惯了...可怜的小p...

总结:

1.palindromic substring回文串:正着读反着读一样的字符串

2.原生list和numpy倒叙操作:

import numpy as np
a=np.array([1,2,3,4,5])
b=[1,2,3,4,5]

'''正确用法'''

a[::-1]
# Out[20]: array([5, 4, 3, 2, 1])
b[::-1]
# Out[21]: [5, 4, 3, 2, 1]

a[3:1:-1]
# Out[25]: array([4, 3])
b[3:1:-1]
# Out[26]: [4, 3]

'''错误用法'''

a[3:1]
# Out[24]: array([], dtype=int64)
b[3:1]
# Out[27]: []


但是,由于list切片前闭后开的特性这里面还是有问题的,

a[1:3]
# Out[29]: array([2, 3])
a[3:1:-1]
# Out[30]: array([4, 3])
a[2:0:-1]
# Out[35]: array([3, 2])


实际上和[n:m]对应的逆序列不是[m:n:-1]而是[m-1:n-1:-1],但是,当m/n中有一个是0的时候,由于-1在切片中指倒数第一的意思,所以会出错,故我采用了.reverse()方法,而非切片的手段。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: