lcp[i][j] > 0, 说明有重复, 按照这个关系, 填完word, 最后验证由这个word得到的lcp矩阵是不是一致的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class Solution {
public String findTheString(int[][] lcp) { int len = lcp.length; char[] ans = new char[len]; Arrays.fill(ans, '0'); char ch = 'a'; for (int i = 0; i < len; i++) { if (lcp[i][i] != len - i) { return ""; } for (int j = i; j < len; j++) { if (lcp[i][j] != lcp[j][i]) { return ""; } if (lcp[i][j] != 0 && ans[j] == '0') { if (ch > 'z') { return ""; } ans[j] = ch; } } if (ans[i] == ch) { ch++; } }
for (int i = len-1; i >= 0; i--) { for (int j = len-1; j >= 0; j--) { int actualLcp = ans[i] != ans[j] ? 0 : ((i == len-1 || j == len-1) ? 1 : lcp[i+1][j+1]+1); if (lcp[i][j] != actualLcp) { return ""; } } } return new String(ans); } }
|