classSolution{public:intstrongPasswordChecker(strings){constintn=s.length();constintmissing=getMissing(s);// # of replacements to deal with 3 repeating charactersintreplaces=0;// # of seqs that can be substituted with 1 deletions, (3k)-seqsintoneSeq=0;// # of seqs that can be substituted with 2 deletions, (3k + 1)-seqsinttwoSeq=0;for(inti=2;i<n;)if(s[i]==s[i-1]&&s[i-1]==s[i-2]){intlength=2;// Length of repeating swhile(i<n&&s[i]==s[i-1]){++length;++i;}replaces+=length/3;// 'aaaaaaa' -> 'aaxaaxa'if(length%3==0)++oneSeq;if(length%3==1)++twoSeq;}else{++i;}if(n<6)returnmax(6-n,missing);if(n<=20)returnmax(replaces,missing);constintdeletes=n-20;// Each replacement in (3k)-seqs can be substituted with 1 deletionsreplaces-=min(oneSeq,deletes);// Each replacement in (3k + 1)-seqs can be substituted with 2 deletionsreplaces-=min(max(deletes-oneSeq,0),twoSeq*2)/2;// Each replacement in other seqs can be substituted with 3 deletionsreplaces-=max(deletes-oneSeq-twoSeq*2,0)/3;returndeletes+max(replaces,missing);}private:intgetMissing(conststring&s){intmissing=3;if(any_of(begin(s),end(s),[](charc){returnisupper(c);}))--missing;if(any_of(begin(s),end(s),[](charc){returnislower(c);}))--missing;if(any_of(begin(s),end(s),[](charc){returnisdigit(c);}))--missing;returnmissing;}};
classSolution{publicintstrongPasswordChecker(Strings){finalintn=s.length();finalchar[]chars=s.toCharArray();finalintmissing=getMissing(chars);// # of replacements to deal with 3 repeating charactersintreplaces=0;// # of seqs that can be substituted with 1 deletions, (3k)-seqsintoneSeq=0;// # of seqs that can be substituted with 2 deletions, (3k + 1)-seqsinttwoSeq=0;for(inti=2;i<n;)if(chars[i]==chars[i-1]&&chars[i-1]==chars[i-2]){intlength=2;// Length of repeating charswhile(i<n&&chars[i]==chars[i-1]){++length;++i;}replaces+=length/3;// 'aaaaaaa' -> 'aaxaaxa'if(length%3==0)++oneSeq;if(length%3==1)++twoSeq;}else{++i;}if(n<6)returnMath.max(6-n,missing);if(n<=20)returnMath.max(replaces,missing);finalintdeletes=n-20;// Each replacement in (3k)-seqs can be substituted with 1 deletionsreplaces-=Math.min(oneSeq,deletes);// Each replacement in (3k + 1)-seqs can be substituted with 2 deletionsreplaces-=Math.min(Math.max(deletes-oneSeq,0),twoSeq*2)/2;// Each replacement in other seqs can be substituted with 3 deletionsreplaces-=Math.max(deletes-oneSeq-twoSeq*2,0)/3;returndeletes+Math.max(replaces,missing);}privateintgetMissing(finalchar[]chars){intmissing=3;for(finalcharc:chars)if(Character.isUpperCase(c)){--missing;break;}for(finalcharc:chars)if(Character.isLowerCase(c)){--missing;break;}for(finalcharc:chars)if(Character.isDigit(c)){--missing;break;}returnmissing;}}