class Solution {
public:
int maxProduct(string s) {
int len = s.size();
int n = (1 << s.size());
vector<bool> ans;
ans.resize(n, false);
int Max = 0;
for(int i = 1;i < n;i++) { //遍历所有的可能性
string sr = "";
for(int j = len - 1;j >= 0;j--) {
if((1 << j) & i) sr += s[len - 1 - j]; //判断每一位上的字母去还是不取
}
if(judge(sr)) ans[i] = true; //判断是不是回文序列
}
for(int i = 1;i < n;i++) {
if(ans[i]) {
for(int j = i + 1;j < n;j++) {
if(ans[j] && !(i & j)) { //判断i 和 j这两个回文序列是否相交
Max = max(Max, __builtin_popcount(i) * __builtin_popcount(j));
}
}
}
}
return Max;
}
bool judge(string s) {
int left = 0, right = s.size() - 1;
while(left < right) {
if(s[left] != s[right]) return false;
left++;
right--;
}
return true;
}
};
快速求一个二进制中1的个数的函数__builtin_popcount()
最新推荐文章于 2022-05-18 18:59:20 发布