小红的数字删除 - 牛客
·
小红的数字删除
题目不难,忽略了一个 corner case,导致我在某次面试没有 AK。
10003
对于这个 case,只考虑前导零 + 全部删除是不对的,剩下的 3 也不能删。
void solve(){
string s;
cin >> s;
int res=0;
vector<int> a(10, 0);
for(char x:s) {
a[x-'0']++;
res+=x-'0';
}
res%=3;
int ans=0;
a[3]+=a[6]+=a[9];
a[1]+=a[4]+=a[7];
a[2]+=a[5]+=a[8];
if(res==0){
ans=a[3]+a[0];
}
else {
int x=res;
if(a[x]>=2){
ans=1+a[3]+a[0];
}
else if(a[x]==1){
if((s[0]-'0')%3==x){
int idx=1;
while(idx<s.size()&&(s[idx]=='0')) idx++;
ans=1+a[3]+a[0]-(idx-1);
if(ans==1)ans=0;
if(ans+(idx-1)==s.size()) ans--;
}
else{
ans=1+a[3]+a[0];
}
}
else ans = 0;
}
if(ans==(int)s.size()) ans--;
cout<<ans<<'\n';
}
更多推荐



所有评论(0)