Leetcode 1177 构建回文串检测
GitHub-LT-1177-源码 :large_blue_diamond:这是一道数学题-短时间内根本写不出来,下次写我也写不出来.哈哈.
- 疑惑点
++ C++的同种写法竟然比java慢好多,难以理解,还是自己不会用?
尽管我换了写法,将自己能想到影响性能的地方修改了,但还是没能超过java的速度.令我震惊!!!
问题描述
给你一个字符串 s,请你对 s 的子串进行检测。 待检子串都可以表示为 queries[i] = [left, right, k] left是起始index,right是最后index,k表示最多替换次数 子串可以重新排序
class Solution {
public:
vector<bool> canMakePaliQueries(string s, vector<vector<int>>& queries) {
vector<bool> result;
int size = s.size();
vector<int> status(size);
status[0] = (1 << (s[0] - 'a'));
for (int i = 1; i < size; i++) {
status[i] = (status[i - 1] ^ (1 << (s[i] - 'a')));
}
int length = queries.size();
for (int i = 0; i < length;i++) {
int k = queries[i][2];
int tmp;
if (queries[i][0] == 0) {
tmp = status[queries[i][1]];
}
else {
tmp =(status[queries[i][1]] ^ status[queries[i][0] - 1]);
}
int count = 0;
while (tmp > 0) {
if ((tmp & 1) == 1) {
count++;
}
tmp >>= 1;
}
result.push_back(count == 0 || ((count >> 1) <= k));
}
return result;
}
};