[LeetCode 471] Encode String with Shortest Length
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode 471] Encode String with Shortest Length相关的知识,希望对你有一定的参考价值。
Trick: int r = (sub + sub).find(sub, 1); 寻找重复pattern。sub.size() % r == 0一定成立。否则设r是查找结果,总能找到更小的r满足条件。
1 class Solution { 2 public: 3 string encode(string s) { 4 int n = s.size(); 5 vector<vector<string>> dp(n + 1, vector<string>(n + 1)); 6 for (int i = 0; i < n; i++) { 7 dp[i][i + 1].push_back(s[i]); 8 } 9 for (int k = 2; k <= n; k++) { 10 for (int i = 0, j = k; j <= n; i++, j++) { 11 dp[i][j] = dp[i][j - 1] + dp[j - 1][j]; 12 for (int m = i + 1; m < j; m++) { 13 string tmp = dp[i][m] + dp[m][j]; 14 if (tmp.size() < dp[i][j].size()) { 15 dp[i][j] = tmp; 16 } 17 } 18 int len = j - i; 19 string sub = s.substr(i, len); 20 int r = (sub + sub).find(sub, 1); 21 if (r < len) { 22 string tmp = to_string(len / r) + "[" + dp[i][i + r] + "]"; 23 if (tmp.size() < dp[i][j].size()) { 24 dp[i][j] = tmp; 25 } 26 } 27 } 28 } 29 return dp[0][n]; 30 } 31 };
以上是关于[LeetCode 471] Encode String with Shortest Length的主要内容,如果未能解决你的问题,请参考以下文章
python3 str.encode bytes.decode