---
# System prepended metadata

title: Untitled

---

```python=
from collections import defaultdict

class Solution:
    def minCostConnectPoints(self, points: List[List[int]]) -> int:
        if len(points) <= 1: return 0
        graph = {}
        connection = defaultdict(int)
        for i, (idx1, idx2) in enumerate(points):
            graph[i] = {i}
            for j, (pos1, pos2) in enumerate(points):
                if j <= i: continue
                value = abs(idx1-pos1) + abs(idx2-pos2)
                connection[(i, j)] = value
        sorted_conn = sorted(connection.items(), key=lambda x: x[1], reverse=False)
        res = 0
        for pos, val in sorted_conn:
            if len(graph[pos[0]].intersection(graph[pos[1]]))==0:
                union_set = graph[pos[0]].union(graph[pos[1]])
                for pt in union_set:
                    graph[pt] = union_set
                res += connection[(pos[0], pos[1])]
        return res
```


```python=
from collections import defaultdict

class Solution:
    def __init__(self):
        self.res = ""
        self.dict = defaultdict()
    
    def isPalindrome(self, s, start, end):
        if (start, end) in self.dict.keys():
            return self.dict[(start, end)]
        s_ = s[start:end]
        if len(s_) == 1: return True
        left = 0
        right = len(s_) - 1
        while left<=right and s_[left] == s_[right]:
            left += 1
            right -= 1
        if left - right == 1 or left - right == 2:
            self.dict[(start, end)] = True
            return True
        else:
            self.dict[(start, end)] = False
            return False
    
    def longestPalindrome(self, s: str) -> str:
        res = ""
        self.longestPalindromeHelper(s, 0, len(s))
        return self.res
        
    def longestPalindromeHelper(self, s, start, end):
        if not self.isPalindrome(s, start, end):
            self.longestPalindromeHelper(s, start+1, end)
            self.longestPalindromeHelper(s, start, end-1)
        else:
            if end-start > len(self.res):
                self.res = s[start:end]
        
```