LeetCode 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.

 

First Attempt: 

 

 

 
class Solution {
    public String licenseKeyFormatting(String S, int K) {
        
        
        if(S==null || S.length()==0){
            
            return null;
        }
        
        String result = "";
        
        String[] tmp = S.split("-");
        
        String res = "";
        
        int sum = 0; 
        for(int i = 0; i<tmp.length; i++){
            
            sum = sum+ tmp[i].length();
            
            res = res + tmp[i].toUpperCase();
        }
        
        
        int i = sum % K;
        
        int k = sum/K ; 
        
        //res = res.toUpperCase();
        
        result = result +  res.substring(0,i);
        
        if(i!=0 && k!=0){
            result = result +"-";
        }
        
        
        String tmp_res = res.substring(i,res.length());

         //System.out.println(sum + " "+ i+" c "+ tmp_res+" d "+ k);
        
        for(int j = 1; j<= k; j++ ){
                    
            result = result + tmp_res.substring(K*(j-1), K*j);
                
            if(j != k ){
                
                result = result +"-";
            }
            // System.out.println( tmp_res.substring(K*(j-1), K*j));
        }
        
        return result;
    }
}

  

 
Accepted 
class Solution {
    public String licenseKeyFormatting(String S, int K) {
        
        
        if(S==null || S.length()==0){
            
            return null;
        }
        
     
        
        S = S.replaceAll("[-]", "");
        S = S.toUpperCase();
                
        
        StringBuilder sb = new StringBuilder();
        sb.append(S);

        int i=sb.length()-K;
        
        while(i>0) {
            sb.insert(i, '-');
            i = i-K;
        }

        
        return sb.toString();
    }
}

 

 

posted @ 2019-11-26 16:27  CodingYM  阅读(230)  评论(0编辑  收藏  举报