From cf1c98eac1b7c2296d875fd03fb970abf3526cc8 Mon Sep 17 00:00:00 2001 From: kkunkka Date: Mon, 15 Jan 2024 17:16:42 +0800 Subject: [PATCH] kk --- src/main/java/com/dota/map/Solution.java | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/main/java/com/dota/map/Solution.java diff --git a/src/main/java/com/dota/map/Solution.java b/src/main/java/com/dota/map/Solution.java new file mode 100644 index 0000000..e775199 --- /dev/null +++ b/src/main/java/com/dota/map/Solution.java @@ -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(); + } +} \ No newline at end of file