Leetcode 1177 构建回文串检测-让我怀疑C++的一道题

167 阅读1分钟

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;
	}
};