kk
This commit is contained in:
40
src/main/java/com/dota/map/Solution.java
Normal file
40
src/main/java/com/dota/map/Solution.java
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package com.dota.map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造限制重复的字符串
|
||||||
|
*/
|
||||||
|
class Solution {
|
||||||
|
|
||||||
|
public String repeatLimitedString(String s, int repeatLimit) {
|
||||||
|
var dp = new int[26];
|
||||||
|
for (char c : s.toCharArray()) {
|
||||||
|
dp[c - 'a']++;
|
||||||
|
}
|
||||||
|
|
||||||
|
var res = new StringBuilder();
|
||||||
|
var i = 25;
|
||||||
|
while (i >= 0) {
|
||||||
|
if (dp[i] > repeatLimit) {
|
||||||
|
res.append(String.valueOf((char) ('a' + i)).repeat(repeatLimit));
|
||||||
|
dp[i] -= repeatLimit;
|
||||||
|
|
||||||
|
var j = i - 1;
|
||||||
|
while (j >= 0 && dp[j] == 0) {
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (j == -1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
res.append((char)('a' + j));
|
||||||
|
dp[j]--;
|
||||||
|
} else {
|
||||||
|
res.append(String.valueOf((char) ('a' + i)).repeat(dp[i]));
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.toString();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user