482. License Key Formatting

LeetCode easy original: C# #array #csharp #easy #leetcode #string
Il testo del problema è tradotto dal russo per la lingua selezionata. Il codice resta invariato.

Вам дан лицензионный ключ, представленный в виде строки s, которая состоит только из буквенно-цифровых символов и тире. stringa разделена на n + 1 групп с помощью n тире. Вам также given intero k.

Мы хотим переформатировать строку s так, чтобы каждая группа содержала ровно k символов, за исключением первой группы, которая может быть короче k, но все же должна содержать хотя бы один символ. Кроме того, между двумя группами должно быть вставлено тире, и все строчные буквы следует преобразовать в прописные.

return переформатированный лицензионный ключ.

Esempio:

Input: s = "5F3Z-2e-9-w", k = 4

Output: "5F3Z-2E9W"

Explanation: The string s has been split into two parts, each part has 4 characters.

Note that the two extra dashes are not needed and can be removed.

C# soluzione

abbinato/originale
public class Solution {
    public string LicenseKeyFormatting(string s, int k) {
        int count = 0;
        var ans = new StringBuilder();
        for (int i = s.Length - 1; i >= 0; i--) {
            if (s[i] != '-') {
                ans.Append(char.ToUpper(s[i]));
                count++;
                if (count == k) {
                    ans.Append('-');
                    count = 0;
                }
            }
        }
        if (ans.Length > 0 && ans[ans.Length - 1] == '-') {
            ans.Length--;
        }
        var arr = ans.ToString().ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }
}

C++ soluzione

bozza automatica, rivedere prima dell'invio
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string LicenseKeyFormatting(string s, int k) {
        int count = 0;
        var ans = new StringBuilder();
        for (int i = s.size() - 1; i >= 0; i--) {
            if (s[i] != '-') {
                ans.Append(char.ToUpper(s[i]));
                count++;
                if (count == k) {
                    ans.Append('-');
                    count = 0;
                }
            }
        }
        if (ans.size() > 0 && ans[ans.size() - 1] == '-') {
            ans.size()--;
        }
        var arr = ans.ToString().ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }
}

Java soluzione

abbinato/originale
class Solution {
    public String licenseKeyFormatting(String s, int k) {
        int count = 0;
        StringBuilder ans = new StringBuilder();

        for (int i = s.length() - 1; i >= 0; i--) {
            if (s.charAt(i) != '-') {
                ans.append(Character.toUpperCase(s.charAt(i)));
                count++;
                if (count == k) {
                    ans.append('-');
                    count = 0;
                }
            }
        }

        if (ans.length() > 0 && ans.charAt(ans.length() - 1) == '-') {
            ans.deleteCharAt(ans.length() - 1);
        }

        return ans.reverse().toString();
    }
}

JavaScript soluzione

abbinato/originale
var licenseKeyFormatting = function(s, k) {
    let count = 0;
    let ans = [];

    for (let i = s.length - 1; i >= 0; i--) {
        if (s[i] !== '-') {
            ans.push(s[i].toUpperCase());
            count++;
            if (count === k) {
                ans.push('-');
                count = 0;
            }
        }
    }

    if (ans.length > 0 && ans[ans.length - 1] === '-') {
        ans.pop();
    }

    return ans.reverse().join('');
};

Python soluzione

abbinato/originale
class Solution:
    def licenseKeyFormatting(self, s: str, k: int) -> str:
        count = 0
        ans = []

        for char in reversed(s):
            if char != '-':
                ans.append(char.upper())
                count += 1
                if count == k:
                    ans.append('-')
                    count = 0
        
        if ans and ans[-1] == '-':
            ans.pop()

        return ''.join(reversed(ans))

Go soluzione

abbinato/originale
package main

import (
    "strings"
    "unicode"
)

func licenseKeyFormatting(s string, k int) string {
    count := 0
    var ans strings.Builder

    for i := len(s) - 1; i >= 0; i-- {
        if s[i] != '-' {
            ans.WriteByte(byte(unicode.ToUpper(rune(s[i]))))
            count++
            if count == k {
                ans.WriteByte('-')
                count = 0
            }
        }
    }

    res := ans.String()
    if len(res) > 0 && res[len(res)-1] == '-' {
        res = res[:len(res)-1]
    }

    runes := []rune(res)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }

    return string(runes)
}

Algorithm

Инициализация

Установите count в 0 для подсчета символов в текущей группе. Установите ans в пустую строку для хранения конечного результата.

Итерация по Inputной строке в обратном порядке

Пропускайте символы '-'. Если текущий символ не '-', добавьте его в ans и увеличьте count на 1. Если count достигает k, добавьте '-' в ans и сбросьте count.

Завершение

Проверьте, есть ли в конце строки ans тире, и удалите его, если оно есть. Переreturn строку ans и return её.

😎

Vacancies for this task

offerte attive with overlapping task tags are mostrati.

Tutte le offerte
Non ci sono ancora offerte attive.