• [Swift]LeetCode482. 密钥格式化 | License Key Formatting


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9799232.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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.

    给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号)。N 个 '-' 将字符串分成了 N+1 组。给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符,第一个分组至少要包含 1 个字符。两个分组之间用 '-'(破折号)隔开,并且将所有的小写字母转换为大写字母。

    给定非空字符串 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 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。
    

    提示:

    1. S 的长度不超过 12,000,K 为正整数
    2. S 只包含字母数字(a-z,A-Z,0-9)以及破折号'-'
    3. S 非空

     1 class Solution {
     2     func licenseKeyFormatting(_ S: String, _ K: Int) -> String {
     3         var res:[String] = [String]()
     4         for index in S.indices.reversed()
     5         {
     6             if S[index] != "-"
     7             {
     8                 if res.count % (K + 1) == K
     9                 {
    10                     res.append("-")
    11                 }
    12                 res.append(String(S[index]))
    13             }
    14         }
    15         //字符数组转字符串
    16         var str:String = String(res.joined(separator: "").reversed())
    17         return str.uppercased()
    18     }
    19 }

    132ms

     1 class Solution {
     2     func licenseKeyFormatting(_ S: String, _ K: Int) -> String {
     3         var bufferS: String = ""
     4         var result: String = ""
     5         
     6         if(S.count == 0) { return "" }
     7         
     8         for c in S {
     9             if(String(c) != "-") {
    10                 bufferS += (String(c)).uppercased()
    11             }
    12         }
    13         
    14         var i: Int = bufferS.count % K == 0 ? K : bufferS.count % K
    15         for c in bufferS {
    16             if(i == 0) {
    17                 result += "-"
    18                 i = K
    19             }
    20             if(i > 0) {
    21                 result += String(c)
    22                 i -= 1
    23             }
    24         }
    25         
    26         return result
    27     }
    28 }

    220ms

     1 class Solution {
     2     func licenseKeyFormatting(_ S: String, _ K: Int) -> String {
     3         let s = S.replacingOccurrences(of: "-", with: "").uppercased()
     4         let chas = [Character](s)
     5         
     6         var res = ""
     7         res.append(String(chas[..<(chas.count%K)]))
     8        
     9         for i in stride(from: chas.count % K, to: chas.count, by: K) {
    10             if !res.isEmpty {
    11                 res.append("-")
    12             }
    13             res.append(String(chas[i..<(i+K)]))
    14         }
    15         
    16         return res
    17     }
    18 }

    368ms

     1 class Solution {
     2     func licenseKeyFormatting(_ S: String, _ K: Int) -> String {
     3         var stringArray = S.split(separator: "-").joined(separator: "").map { String($0) }
     4         
     5         var returnString: String = ""
     6         
     7         while(!stringArray.isEmpty) {
     8             let subArray: String = Array(stringArray.suffix(K)).reduce("", +).uppercased()
     9             for _ in 0..<subArray.count {
    10                 stringArray.removeLast()
    11             }
    12             returnString = stringArray.isEmpty ? "(subArray)" + returnString : "-(subArray)" + returnString
    13             
    14         }
    15         
    16         return returnString
    17     }
    18 }

    1052ms

     1 class Solution {
     2     func licenseKeyFormatting(_ S: String, _ K: Int) -> String {
     3 
     4         var n = 0
     5         for c in S {
     6             if c != "-" {
     7                 n += 1
     8             }
     9         }
    10         
    11         var num_g = n / K
    12         var first = K
    13         if n % K > 0 {
    14             first = n % K
    15             num_g += 1
    16         }
    17         
    18         var res = ""
    19         var temp = ""
    20         var count_g = 0
    21         
    22         for c in S {
    23             if c != "-" {
    24                 temp += String(c).uppercased()
    25                 if (count_g == 0 && temp.count == first && count_g != num_g-1) || (count_g < num_g-1 && temp.count == K) {
    26                     res += temp + "-"
    27                     temp = ""
    28                     count_g += 1
    29                 } else if (count_g == num_g-1 && temp.count == K) || (count_g == 0 && temp.count == first) {
    30                     res += temp
    31                     temp = ""
    32                     count_g += 1
    33                 }
    34             }
    35         }
    36         
    37         return res
    38     }
    39 }
  • 相关阅读:
    vscode 代码补全工具之aiXcoder
    SQL语句替换某个字段的部分数据
    Antd中,Select 中value设值,导致placeholder不生效解决方法
    Git简易使用教程
    Hyper-V虚拟机上安装Ubuntu16.04/Ubuntu18.04.2LTS,搭建GitLab
    Hyper-V虚拟机安装Ubuntu,启动的时候会出现:Please remove the installation medium,then press ENTER
    来博客园9年多了,mark一下
    一步一步教你用IntelliJ IDEA 搭建SSM框架(3)——实现用户登录功能
    一步一步教你用IntelliJ IDEA 搭建SSM框架(2)——配置mybatis-geneator
    ITSEC TEAM 2013培训公开视频
  • 原文地址:https://www.cnblogs.com/strengthen/p/9799232.html
Copyright © 2020-2023  润新知