zoukankan      html  css  js  c++  java
  • [LeetCode] 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.

    给一个字符串的注册码S,按要求对注册码进行格式化,每四个字符后面跟一个短横杠,每一部分的长度为K,第一部分长度可以小于K,所有字母必须是大写的。

    解法:用数组记录字符,从后往前循环字符串,当前字符不是短横杠,就变大写加入数组,每隔四个字母加一个短横杠,最后在转换成字符串。

    最重要的是判断4个字符的方法: if len(res) % (K + 1) == K

    Java:

    class Solution {
        public String licenseKeyFormatting(String S, int K) {
            StringBuilder sb = new StringBuilder();
            for (int i = S.length() - 1; i >= 0; i--) {
                if (S.charAt(i) != '-') {
                    sb.append(sb.length() % (K + 1) == K ? "-" : "").append(S.charAt(i));
                } 
            }
            return sb.reverse().toString().toUpperCase();
        }
    } 
    

    Java:

    public String licenseKeyFormatting(String s, int k) {
        StringBuilder sb = new StringBuilder();
        for (int i = s.length() - 1; i >= 0; i--)
            if (s.charAt(i) != '-')
                sb.append(sb.length() % (k + 1) == k ? '-' : "").append(s.charAt(i));
        return sb.reverse().toString().toUpperCase();
    }   

    Python: wo

    class Solution(object):
        def licenseKeyFormatting(self, S, K):
            """
            :type S: str
            :type K: int
            :rtype: str
            """
            res = []
            for i in reversed(range(len(S))):
                if S[i] != '-':
                    if len(res) % (K + 1) == K:
                        res.append('-')
                    res.append(S[i].upper())
                    
            return ''.join(s for s in reversed(res))    

    Python: wo

    class Solution(object):
        def licenseKeyFormatting(self, S, K):
            res = []
            for c in reversed(S):
                if c != '-':
                    if len(res) % (K + 1) == K:
                        res.append('-')
                    res.append(c.upper())
                    
            return ''.join(r for r in reversed(res))   

    Python:

    class Solution(object):
        def licenseKeyFormatting(self, S, K):
            """
            :type S: str
            :type K: int
            :rtype: str
            """
            S = S.upper().replace('-','')
            size = len(S)
            s1 = K if size%K==0 else size%K
            res = S[:s1]
            while s1<size:
                res += '-'+S[s1:s1+K]
                s1 += K
            return res 

    Python:

    class Solution:
        def licenseKeyFormatting(self, S, K):
            """
            :type S: str
            :type K: int
            :rtype: str
            """
            S = S.replace("-", "").upper()[::-1]
            return '-'.join(S[i:i+K] for i in range(0, len(S), K))[::-1]  

    Python:

    class Solution:
        def licenseKeyFormatting(self, S, K):
            """
            :type S: str
            :type K: int
            :rtype: str
            """
            def chunks(l, n):
                for i in range(0, len(l), n):
                    yield l[i:i+n]
            s = S[::-1].upper().replace('-', '')   
            return '-'.join(list(chunks(s, K)))[::-1]  

    C++:

    class Solution {
    public:
        string licenseKeyFormatting(string S, int K) {
            string res = "";
            for (int i = (int)S.size() - 1; i >= 0; --i) {
                if (S[i] != '-') {
                    ((res.size() % (K + 1) - K) ? res : res += '-') += toupper(S[i]);
                }
            }
            return string(res.rbegin(), res.rend());
        }
    };
    

      

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    正则表达式-入门初探
    pytorch 对变长序列的处理
    数位DP小结
    impala 使用记录
    2017微软第二场笔试题解
    一次分清:jvm内存结构|jmm|java对象模型
    JMM-java内存模型
    java基础总结
    有关秒杀的一点思考
    Elasticsearch 启动报了TypeError: can’t dup Fixnum 错
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9747402.html
Copyright © 2011-2022 走看看