Hard

Find the String with LCPPython

Full explanation · Time O(n^2) · Space O(1)

# Time:  O(n^2)
# Space: O(1)

# constructive algorithms, greedy, dp
class Solution(object):
    def findTheString(self, lcp):
        """
        :type lcp: List[List[int]]
        :rtype: str
        """
        result = [-1]*len(lcp)
        curr = 0
        for i in xrange(len(lcp)):
            if result[i] != -1:
                continue
            if curr == 26:
                return ""
            for j in xrange(i, len(lcp[0])):
                if lcp[i][j]:
                    result[j] = curr
            curr += 1
        for i in reversed(xrange(len(lcp))):
            for j in reversed(xrange(len(lcp[0]))):
                if lcp[i][j] != ((lcp[i+1][j+1]+1 if i+1 < len(lcp) and j+1 < len(lcp[0]) else 1) if result[i] == result[j] else 0):
                    return ''
        return "".join(map(lambda x: chr(ord('a')+x), result))