size_t和int的隐式类型转换

#include<bits/stdc++.h>
using namespace std;
int mp[39];
int main() {
    string s;
    cin>>s;
    int cnt = 0;
    int ans = 0x3f3f3f3f;
    int n = s.length();
    for (int i = 0 ,j=-1; i < n; i++) {

        while (j < n-1 && cnt<26) {
            j++;
            mp[s[j]-'a']++;
            if (mp[s[j]-'a']==1)
                cnt++;
            if (cnt == 26)
                break;
        }
        if (cnt==26)
            ans = min(ans,j-i+1);
        mp[s[i]-'a']--;
        if (mp[s[i]-'a']==0)
            cnt--;
    }
    if(ans == 0x3f3f3f3f)cout<<-1;
    else cout<<ans;
    return 0;
}

这段代码中内部循环如果用j < s.length()-1就会错,

因为s.length()是size_t类型 , 而int和size_t比较时会被转化为size_t
j为-1 , 就变成了有符号数的极大值

posted @ 2025-06-19 10:28  Guaninf  阅读(34)  评论(0)    收藏  举报