Skip to content

Latest commit

 

History

History
75 lines (53 loc) · 2.46 KB

File metadata and controls

75 lines (53 loc) · 2.46 KB

Question:

You are given a license key represented as a string S which consists only alphanumeric character and dashes. The string is separated into N+1 groups by N dashes.

Given a number K, we would want to reformat the strings such that each group contains exactly K characters, except for the first group which could be shorter than K, but still must contain at least one character. Furthermore, there must be a dash inserted between two groups and all lowercase letters should be converted to uppercase.

Given a non-empty string S and a number K, format the string according to the rules described above.

Example 1:

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.

Example 2:

Input: S = "2-5g-3-J", K = 2

Output: "2-5G-3J"

Explanation: The string S has been split into three parts, each part has 2 characters except the first part as it could be shorter as mentioned above.

Note:

  1. The length of string S will not exceed 12,000, and K is a positive integer.
  2. String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-).
  3. String S is non-empty.

Analysis

本题题目大意是这样,给定一个字符串,要求变成"k-K-K"形式,只有第一个块可以少点,那就容易了,从后往前遍历,最终在转置下,就可以得到了。

Tips

为了减少末尾多加一个‘-’的可能性,可以采取判断满足count在前面的策略。

Code

func licenseKeyFormatting(S string, K int) string {
        var ret []byte
        var count int
        for i := len(S) - 1; i >= 0; i-- {
                if S[i] == '-' {
                        continue
                }

                if count == K { // 有了值才判断是否添加,优于插入了字符后判断要不要加‘-’,这样可以避免末尾多加一个‘-’
                        count = 0
                        ret = append(ret, byte('-'))
                }

                count++
                c := S[i]
                if c >= 'a' && c <= 'z' {
                        c -= 32
                }
                ret = append(ret, byte(c))

        }

        if len(ret) > 1 {
                for i, j := 0, len(ret)-1; i < j; i, j = i+1, j-1 {
                        ret[i], ret[j] = ret[j], ret[i]
                }
        }
        return string(ret)

}