int maxProduct(vector<string>& words) {
if (words.size() == 1)
return 0;
int ans = INT_MIN;
for (int i = 0; i < words.size() - 1; ++i) {
for (int j = i + 1; j < words.size(); ++j) {
bool flag = false;
for (char c : words[i]) {
if (words[j].find(c) != words[j].npos) {
flag = true;
break;
}
}
words[i].size();
bool c = flase;
int a = words[i].size(), b = words[j].size();
c = (words[i].size() * words[j].size() )> ans; //1
if (!flag&&a*b > ans) //2
ans = words[i].size() * words[j].size(); //3
}
}
return ans;
}
void main() {
vector<string> a{ "abcw","baz","foo","bar","xtfn","abcdef" };
int ans = maxProduct(a);
}
如上代码,c一开始被定义为flase,在i=0,j=1的时候,1处的c按我们的思想应该是变成true的,但是在运行到的时候,c不会改变,看起来就跟1处的比较完全没发生一样,这其实是因为,std容器的.size()函数返回的是unsigned int类型,而ans是int类型,在16位模式下ans=0x80000000,两个size的乘积结果为0x0000000c,于是我们用unsigned int类型和int类型进行比较的时候,会自动把int变成unsigned int,所以结果肯定是false;