482. License Key Formatting

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.

输出的字符串,每组包含K个字符,第1组可以小于K个

 

C++(12ms):

 1 class Solution {
 2 public:
 3     string licenseKeyFormatting(string S, int K) {
 4         string res = "";
 5         int len = S.size() ;
 6         for(int i = len-1 ; i >= 0 ; i--){
 7             if (S[i] != '-'){
 8                 if (res.size()%(K+1) == K){
 9                     res += '-' ; 
10                     res += toupper(S[i]) ;
11                 }else{
12                     res += toupper(S[i]) ;
13                 }
14             }
15         }
16         reverse(res.begin() , res.end()) ;
17         return res ;
18     }
19 };

 

posted @ 2018-01-05 10:30  __Meng  阅读(227)  评论(0编辑  收藏  举报