小紅的數字刪除
題目不難,忽略了一個 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';
}