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". Joining the blocks gives "123-456".
Example 2:
Input: number = "123 4-567" Output: "123-45-67" Explanation: The digits are "1234567". Step 1: There are more than 4 digits, so group the next 3 digits. The 1st block is "123". Step 2: There are 4 digits left, so split them into two blocks of length 2. The blocks are "45" and "67". Joining the blocks gives "123-45-67".
Example 3:
Input: number = "123 4-5678" Output: "123-456-78" Explanation: The digits are "12345678". Step 1: The 1st block is "123". Step 2: The 2nd block is "456". Step 3: There are 2 digits left, so put them in a single block of length 2. The 3rd block is "78". Joining the blocks gives "123-456-78".
Constraints:
2 <= number.length <= 100
number
consists of digits and the characters'-'
and' '
.- There are at least two digits in
number
.
First, according to the problem description, we remove all spaces and hyphens from the string.
Let the current string length be
If there is
Finally, we add hyphens between all groups and return the result string.
The time complexity is
class Solution:
def reformatNumber(self, number: str) -> str:
number = number.replace("-", "").replace(" ", "")
n = len(number)
ans = [number[i * 3 : i * 3 + 3] for i in range(n // 3)]
if n % 3 == 1:
ans[-1] = ans[-1][:2]
ans.append(number[-2:])
elif n % 3 == 2:
ans.append(number[-2:])
return "-".join(ans)
class Solution {
public String reformatNumber(String number) {
number = number.replace("-", "").replace(" ", "");
int n = number.length();
List<String> ans = new ArrayList<>();
for (int i = 0; i < n / 3; ++i) {
ans.add(number.substring(i * 3, i * 3 + 3));
}
if (n % 3 == 1) {
ans.set(ans.size() - 1, ans.get(ans.size() - 1).substring(0, 2));
ans.add(number.substring(n - 2));
} else if (n % 3 == 2) {
ans.add(number.substring(n - 2));
}
return String.join("-", ans);
}
}
class Solution {
public:
string reformatNumber(string number) {
string s;
for (char c : number) {
if (c != ' ' && c != '-') {
s.push_back(c);
}
}
int n = s.size();
vector<string> res;
for (int i = 0; i < n / 3; ++i) {
res.push_back(s.substr(i * 3, 3));
}
if (n % 3 == 1) {
res.back() = res.back().substr(0, 2);
res.push_back(s.substr(n - 2));
} else if (n % 3 == 2) {
res.push_back(s.substr(n - 2));
}
string ans;
for (auto& v : res) {
ans += v;
ans += "-";
}
ans.pop_back();
return ans;
}
};
func reformatNumber(number string) string {
number = strings.ReplaceAll(number, " ", "")
number = strings.ReplaceAll(number, "-", "")
n := len(number)
ans := []string{}
for i := 0; i < n/3; i++ {
ans = append(ans, number[i*3:i*3+3])
}
if n%3 == 1 {
ans[len(ans)-1] = ans[len(ans)-1][:2]
ans = append(ans, number[n-2:])
} else if n%3 == 2 {
ans = append(ans, number[n-2:])
}
return strings.Join(ans, "-")
}
function reformatNumber(number: string): string {
const cs = [...number].filter(c => c !== ' ' && c !== '-');
const n = cs.length;
return cs
.map((v, i) => {
if (((i + 1) % 3 === 0 && i < n - 2) || (n % 3 === 1 && n - 3 === i)) {
return v + '-';
}
return v;
})
.join('');
}
impl Solution {
pub fn reformat_number(number: String) -> String {
let cs: Vec<char> = number
.chars()
.filter(|&c| c != ' ' && c != '-')
.collect();
let n = cs.len();
cs.iter()
.enumerate()
.map(|(i, c)| {
if ((i + 1) % 3 == 0 && i < n - 2) || (n % 3 == 1 && i == n - 3) {
return c.to_string() + &"-";
}
c.to_string()
})
.collect()
}
}