持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
大家好 我是丝瓜咸蛋汤。今天带来的是一道在LeetCode上的题目,题目难度为简单
。就在此为大家分享一下解答思路。
题目阐述
给你一个字符串形式的电话号码 number 。number 由数字、空格 ' '、和破折号 '-' 组成。
请你按下述方式重新格式化电话号码。
首先,删除 所有的空格和破折号。 其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块: 2 个数字:单个含 2 个数字的块。 3 个数字:单个含 3 个数字的块。 4 个数字:两个分别含 2 个数字的块。 最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。
返回格式化后的电话号码。
思路阐述
我使用一个名为 lastdash
的标志来记录破折号外观的最后一个索引。
遍历字符串时,将数字压入 res 中,同时忽略非数字项。
而且,遍历完字符串之后,就到了处理字符串尾部的时候了。
这里有两种情况:
if(lastdash==res.length-1)
这意味着最后一个破折号就在字符串的末尾。 所以删除它。
if (lastdash ==res.length - 2)
这似乎很复杂,但很容易。 只需交换最后一个破折号的位置和它后面的项目。
解答方案
function reformatNumber(number: string): string {
let res = ""
let index = 0
let lastdash = -1
while (index < number.length) {
if (number[index] != (" ") && number[index] != ("-")) {
res = res + number[index];
if (res.length - lastdash > 3 && index != number.length - 1) {
res = res + "-"
lastdash = res.length - 1
}
}
index = index + 1
}
if(lastdash==res.length-1)
res=res.substring(0,res.length-1)
if (lastdash ==res.length - 2) {
let tail = res.substring(lastdash-3, res.length).split("")
tail[tail.length-2]=tail[tail.length-3]
tail[tail.length-3]='-'
res=res.slice(0,lastdash-3).concat(tail.join(""))
}
return res
};
今天是国庆小长假的第一天,最后祝各位读者节日快乐!
我是丝瓜咸蛋汤
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!