2016-05-17:资料+基础

  1. python基础知识

  2. 面试算法

  3. Pandas 教程

  4. Topic Model 教材

  5. 深度强化学习


1. 最长回文子串

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        longest = 0
        max_len=0
        for i in xrange(len(s)):
            if self.isP(s[i - max_len:i+1]):
                longest = i - max_len
                # print 'longest 1:',longest
                max_len = max_len + 1
                # print 'max_len 1 :',max_len
            elif i - max_len - 1 >= 0 and self.isP(s[i-max_len-1:i+1]):
                longest = i - max_len - 1
                max_len = max_len + 2
        return s[longest:longest+max_len]

    def isP(self,s):
        # print s
        return s == s[::-1]


solu = Solution()
print solu.longestPalindrome("xxABCDCBAio")

2. KMP

def mykmp(s,p):
    i,j,m,n,nextarr = -1,0,len(s),len(p),[-1]*len(p)
    while j

3. 最长递增子序列

def lcs_result(c,X,i,j):
    if i==0 or j==0:return
    if c[i][j] == c[i-1][j-1]+1:
        lcs_result(c,X,i-1,j-1)
        print X[i-1]
    elif  c[i][j] == c[i-1][j]:
        lcs_result(c,X,i-1,j)
    else:
        lcs_result(c,X,i,j-1)


def lcs_length(s1,s2):
    m,n = len(s1),len(s2)
    c=[[0 for i in range(n+1)] for i in range(m+1)]
    # c = [[0]*(n+1)]*(m+1)
    # print c==c1
    for i in range(m):
        for j in range(n):
            if s1[i]==s2[j]:
                c[i+1][j+1] = c[i][j]+1
            else:
                c[i+1][j+1] = max(c[i+1][j],c[i][j+1])
    return c

x = 'ABCBDAB'
y = 'BDCABA'
c = lcs_length(x,y)
lcs_result(c,'ABCBDAB',len(x),len(y))

你可能感兴趣的:(2016-05-17:资料+基础)