482.license-key-formatting.go 574 B

12345678910111213141516171819202122232425262728293031323334353637
  1. func licenseKeyFormatting(S string, K int) string {
  2. runes := preprocess(S)
  3. n := len(runes)
  4. if n == 0 {
  5. return ""
  6. }
  7. dash, cnt := n/K, n%K
  8. if n%K == 0 {
  9. dash--
  10. cnt = K
  11. }
  12. key := make([]rune, n+dash)
  13. for i, j := 0, 0; i < n+dash; i++ {
  14. if cnt == 0 {
  15. cnt = K
  16. key[i] = '-'
  17. } else {
  18. key[i] = runes[j]
  19. j++
  20. cnt--
  21. }
  22. }
  23. return string(key)
  24. }
  25. func preprocess(s string) []rune {
  26. runes := make([]rune, 0)
  27. for _, r := range s {
  28. if r != '-' {
  29. if 'a' <= r && r <= 'z' {
  30. r = rune(r - 32)
  31. }
  32. runes = append(runes, r)
  33. }
  34. }
  35. return runes
  36. }