1694. Reformat Phone Number

package LeetCode_1694

import java.util.*

/**
 * 1694. Reformat Phone Number
 * https://leetcode.com/problems/reformat-phone-number/
 * You are given a phone number as a string number. number consists of digits, spaces ' ', and/or dashes '-'.
You would like to reformat the phone number in a certain manner. Firstly, remove all spaces and dashes.
Then, group the digits from left to right into blocks of length 3 until there are 4 or fewer digits.
The final digits are then grouped as follows:
2 digits: A single block of length 2.
3 digits: A single block of length 3.
4 digits: Two blocks of length 2 each.
The blocks are then joined by dashes.
Notice that the reformatting process should never produce any blocks of length 1 and produce at most two blocks of length 2.
Return the phone number after formatting.

Example 1:
Input: number = "1-23-45 6"
Output: "123-456"
Explanation: The digits are "123456".
Step 1: There are more than 4 digits, so group the next 3 digits. The 1st block is "123".
Step 2: There are 3 digits remaining, so put them in a single block of length 3. The 2nd block is "456".
 * */
class Solution {
    /*
    * solution: queue, Time:O(n), Space:O(n)
    * */
    fun reformatNumber(number: String): String {
        if (number.length <= 2) {
            return number
        }
        val queue = LinkedList<Char>()
        for (c in number) {
            if (c.isDigit()) {
                queue.offer(c)
            }
        }
        val sb = StringBuilder()
        while (queue.size > 4) {
            sb.append(queue.pop()).append(queue.pop()).append(queue.pop()).append("-")
        }
        while (queue.size == 4) {
            sb.append(queue.pop()).append(queue.pop()).append("-")
        }
        //checking the rest of in queue
        while (queue.isNotEmpty()) {
            sb.append(queue.pop())
        }
        return sb.toString()
    }
}

 

posted @ 2020-12-20 16:12  johnny_zhao  阅读(159)  评论(0编辑  收藏  举报