Это вызов :
Вам предоставляется лицензионный ключ, представленный в виде строки S, которая состоит только из буквенно-цифровых символов и тире.Строка разделена на N + 1 группы N штрихами.
Учитывая число K, мы хотели бы переформатировать строки так, чтобы каждая группа содержала ровно K символов, за исключением первой группы, которая может быть короче K, но все же должна содержать хотя бы один символ.Кроме того, между двумя группами должна быть вставлена тире, а все строчные буквы должны быть преобразованы в прописные.
Если задана непустая строка S и число K, отформатируйте строку в соответствии с правилами, описанными выше.
Пример 1:
Вход : S = "5F3Z-2e-9-w", K = 4 Выход : "5F3Z-2E9W"
Пояснение : Строка S разбита на две части, каждая часть имеет 4 символа.Обратите внимание, что две дополнительные тире не нужны и могут быть удалены.
Пример 2:
Ввод : S= "2-5g-3-J", K = 2 Выход : "2-5G-3J"
Пояснение : строка S разбита натри части, каждая часть имеет 2 символа, кроме первой, поскольку она может быть короче, как указано выше.
Примечание:
1)длина строки S не будет превышать 12 000, а K - положительное целое число.
2) Строка S состоит только из буквенно-цифровых символов (az и / или AZ и / или 0-9) и тире (-).
3) Строка S не пуста.
Вот мой код:
public static String licenseKeyFormatting(String S, int Key) {
String cleaned = S.replaceAll("[\\-]", "").toUpperCase();
String result = "";
int currentPos = 0;
//IF EVENLY SPLIT
if ( (cleaned.length() % Key) == 0 ) {
int numGroups = cleaned.length()/Key;
for(int i = 0; i < numGroups; i++) {
for (int k =0; k < Key; k++) {
char currentLetter = cleaned.charAt(currentPos++);
result = result + currentLetter;
}
if (i != (numGroups - 1)) {
result = result + "-";
}
}
}
else {
int remainder = cleaned.length() % Key;
for (int i = 0; i < remainder; i++) {
char currentLetter = cleaned.charAt(currentPos++);
result = result + currentLetter;
}
if(remainder == cleaned.length()) {
return result;
}
else {
result = result + "-";
}
int numGroups =( (cleaned.length() - remainder)/Key);
for (int i = 0; i < numGroups; i++) {
for (int k =0; k < Key; k++) {
char currentLetter = cleaned.charAt(currentPos++);
result = result + currentLetter;
}
if (i != (numGroups - 1)) {
result = result + "-";
}
}
}
//IF NOT EVENLY SPLIT
return result;
}
Когда я запускаю его на своем компьютере, он работает отлично.Когда я запускаю его по коду leetcode, он выдает ошибку «Превышено ограничение по времени» при вводе строки из 44151 символа и «1» в качестве ключа.Когда я запускаю тот же ввод в моей IDE, он работает нормально, но не в LeetCode.В чем может быть ошибка?Как я могу сделать это более эффективным?