網(wǎng)站開發(fā)到發(fā)布佛山優(yōu)化推廣
思路
首先統(tǒng)計(jì)每個字符的個數(shù),然后從后向前按照題意添加字符
解題方法
從后向前添加字符:1.當(dāng)前字符個數(shù)<=repeatLimit,直接添加
2.當(dāng)前字符個數(shù)>repeatLimit,添加repeatLimit個,然后插入一個下一級字符
時間復(fù)雜度:O(n2)
空間復(fù)雜度:O(n)
Code
class Solution {public String repeatLimitedString(String s, int repeatLimit) {int[] cnt = new int[26];for(int i=0;i<s.length();i++){ //使用數(shù)組統(tǒng)計(jì)每次字符個數(shù)char c = s.charAt(i);cnt[c-'a']++;}StringBuilder sb = new StringBuilder(); //添加字符for(int i=25;i>=0;i--){if(cnt[i]>0 && cnt[i]<=repeatLimit){ // 0<字符個數(shù)<=limitwhile(cnt[i]>0){sb.append((char)('a' + i)); //加入cnt[i]--;}}else if(cnt[i] > repeatLimit){ // 字符個數(shù)>limitint n = repeatLimit;while(n>0){sb.append((char)('a' + i)); //加入repeatLimit個最大字符cnt[i]--;n--;}int j = i-1; //尋找一個小一級的while(j>=0 && cnt[j]==0){j--;}if(j!=-1){sb.append((char)('a' + j)); //找到了cnt[j]--;i++; //重新插入上一個剩余的字母}else{ //沒找到return sb.toString();}}//if--elseif}return sb.toString();}
}
注:依舊是參考答案的一天。。。。。。