Very very Easy Commented and readable solution.
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\nclass Solution {\npublic:\n    // First of all check lcp matrix is valid or not? If not return empty string\n    bool isLcpValid(vector<vector<int>>&lcp)\n    {\n        /*\n            observation-1: lcp[0][0]=dimesnion of matrix;\n            observation-2: lcp[i][j]=lcp[j][i] as in both case two strings [i to n-1] and [j to n-1] are same.\n            observation-3: lcp[i+1][j+1]=lcp[i][j]-1 if lcp[i][j]>0\n            observation-4: lcp[i][j]<=n- max(i,j)\n        */\n        int n=lcp.size();\n        if(lcp[0][0]!=n) return false;\n        for(int i=0;i<n;i++)\n        {\n            for(int j=0;j<n;j++)\n            {\n               if(lcp[i][j]!=lcp[j][i]) return false;\n               if(lcp[i][j]>n-max(i,j)) return false;\n               if(i+1<n && j+1<n && lcp[i][j]>0 &&  lcp[i+1][j+1]!=lcp[i][j]-1) return false;\n            }\n        }\n        return true;\n    }\n    string findTheString(vector<vector<int>>& lcp) \n    {\n        if(isLcpValid(lcp)==false)\n        {\n          // invalid LCP\n            return "";\n        } \n        int n=lcp.size();\n        char currChar=\'a\';\n        vector<char>v(n,\'#\');\n        for(int i=0;i<n;i++)\n        {\n            if(v[i]!=\'#\')continue;\n            if(currChar>\'z\') \n            {\n               // Characters exceeded\n                return "";\n            }\n            for(int j=0;j<n;j++)\n            {\n                if(lcp[i][j]>0) v[j]=currChar; // if two substrings have lcp>0, means have some common prefix, so s[j]=s[i]\n            }\n             currChar++;\n        }\n        string ans="";\n        for(auto it:v)ans+=it;\n        //check if my builded string is satisfying the given lcp or not.\n        for (int i = 0; i < n; ++i) \n        {\n            for (int j = 0; j < n; ++j) \n            {\n                int v = i + 1 < n && j + 1 < n ? lcp[i + 1][j + 1] : 0;\n                v = ans[i] == ans[j] ? v + 1 : 0;\n                if (lcp[i][j] != v) return "";\n            }\n        }\n\n        return ans;\n    }\n};\n```
['Greedy', 'C++']