注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
第一题是magic binary string,题目可以在这里看到
根据贪心把1的个数最多的放在靠前的位置,如果1的个数一样多就把长度更长的放在前面,莫名其妙有runtime error[ 该情况会在之后计算中解决
然后用set检测是否有重复。
这个能过- int para(string str) {
- set<string> check;
- int l = str.length(), result = 0;
- if (l == 0) {
- return 0;
- }
- if (l == 1) {
- return 1;
- }
- vector<vector<int>> dp(2, vector<int>(l+1, 0));
- str = "@" + str + "#";
- for (int j = 0; j<=1; j++) {
- int r = 0;
- dp[j][0] = 0;
- int i = 1;
- while (i <= l) {
- while (str[i - r - 1] == str[i + j + r])
- r++;
- dp[j][i] = r;
- int k = 1;
- while ((dp[j][i - k] != r - k) && (k<r)) {
- dp[j][i + k] = min(dp[j][i - k], r - k);
- k++;
- }
- r = max(r - k, 0);
- i += k;
- }
- }
- str = str.substr(1, l);
- check.insert(string(1, str[0]));
- result++;
- for (int i = 1; i<l; i++) {
- for (int j = 0; j <= 1; j++) {
- for (int r = dp[j][i]; r>0; r--) {
- if (check.find(str.substr(i - r - 1, 2 * r + j)) == check.end()) {
- check.insert(str.substr(i - r - 1, 2 * r + j));
- result++;
- }
- }
- }
- if (check.find(string(1, str[i])) == check.end()) {
- check.insert(string(1, str[i]));
- result++;
- }
- }
- return result;
- }
复制代码 跪求攒人品 |