Python: search longest palindromes within a word and palindromes within a word/string

后端 未结 15 1771
你的背包
你的背包 2020-12-03 09:38

So here is a code i have written to find palindromes within a word (To check if there are palindromes within a word including the word itself) Condition: spaces inbetween ch

相关标签:
15条回答
  • 2020-12-03 09:52

    Here's a code you can use for finding the longest palindromic substring:

    string = "sensmamstsihbalabhismadamsihbala"
    string_shortener = ""
    pres = 0
    succ = 3
    p_temp=0
    s_temp=0
    longest = ""
    for i in range(len(string)-2):
        string_shortener = string[pres:succ]
        if(string_shortener==string_shortener[::-1]):
           p_temp = pres
           s_temp = succ
           for u in range(1000):
               p_temp-=1
               s_temp +=1
               string_shortener = string[p_temp:s_temp]
               if(string_shortener == string_shortener[::-1]):
                    if len(string_shortener)>len(longest):
                        longest = string_shortener
                else:
                    break
        pres+=1
        succ+=1
    print(longest)
    
    0 讨论(0)
  • 2020-12-03 09:54

    below is a code I wrote for the same question. It might not be really optimized but works like a charm. Pretty easy to understand too for beginners

    def longestPalindrome(s):
            pal = []
            longestpalin = s
            l = list(s)
            if len(s)>0:
                if len(s)==2:
                    p = l
                    if p[0]==p[1]:
                        return s
                    else:
                        return l[0]
                else:
                    for i in range(0,len(l)):
                        for j in range(i+1,len(l)+1):
                            p = l[i:j]
                            if p == p[::-1]:
                                if len(p)>len(pal):
                                    pal = p
                                    p = ''.join(p)
                                    longestpalin = p
                return longestpalin
            else:
                return longestpalin
    
    0 讨论(0)
  • 2020-12-03 09:55

    If you like the recursive solution, I have written a recursive version. It is also intuitive.

    def palindrome(s):
      if len(s) <= 1:
        return s
      elif s[0] != s[-1]:
        beginning_palindrome = palindrome(s[:-1])
        ending_palindrome = palindrome(s[1:])
        if len(beginning_palindrome) >= len(ending_palindrome):
          return beginning_palindrome
        else:
          return ending_palindrome
      else:
        middle_palindrome = palindrome(s[1:-1])
        if len(middle_palindrome) == len(s[1:-1]):
            return s[0] + middle_palindrome + s[-1]
        else:
            return middle_palindrome
    
    0 讨论(0)
  • 2020-12-03 09:58
    a = "xabbaabba"  # Provide any string
    
    count=[]
    for j in range(len(a)):
        for i in range(j,len(a)):
            if a[j:i+1] == a[i:j-1:-1]:      
                count.append(i+1-j)
    
    print("Maximum size of Palindrome within String is :", max(count))
    
    0 讨论(0)
  • 2020-12-03 10:00

    Python 3 solution: (not the fastest)

    class Solution:
        def longestPalindrome(self, s: str) -> str:
    
            if s == "":
                return ""
            if len(s) == 1: 
                return s
            if len(s) == 2:
                if s == s[::-1]:
                    return s
                else:
                    return s[0]
    
    
            results = []
    
            for i in range(len(s)):
                for j in range(0, i):
                    chunk = s[j:i + 1]
    
                    if chunk == chunk[::-1]:
                        results.append(chunk)
            if results:       
                return max(results, key=len)
            else:
                return s[0]
    
    0 讨论(0)
  • 2020-12-03 10:00

    Here is another clean and simple approach taken from the excellent online course Design of Computer Programs by P. Norvig. It iterates over all characters in the string and attempts to "grow" the string to both left and right.

    def longest_sub_palindrome_slice(text):
        "Return (i,j) such that text[i,j] is the longest palindrome in text"
        if text == '': return (0, 0)
        def length(slice): a,b = slice; return b-a
        candidates = [grow(text, start, end)
                     for start in range(len(text))
                     for end in (start, start + 1)]
        return max(candidates, key=length)
    
    def grow(text, start, end):
        "Start with a 0- or 1- length palindrome; try to grow a bigger one"
        while (start > 0 and end < len(text)
               and text[start-1].upper() == text[end].upper()):
            start -= 1; end += 1
        return (start, end)
    
    0 讨论(0)
提交回复
热议问题