题目描述:LeetCode-1694. 重新格式化电话号码

给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。

请你按下述方式重新格式化电话号码。

首先,删除 所有的空格和破折号。
其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:
2 个数字:单个含 2 个数字的块。
3 个数字:单个含 3 个数字的块。
4 个数字:两个分别含 2 个数字的块。
最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。

返回格式化后的电话号码。

示例 1:

输入:number = “1-23-45 6”
输出:“123-456”
解释:数字是 “123456”
步骤 1:共有超过 4 个数字,所以先取 3 个数字分为一组。第 1 个块是 “123” 。
步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。第 2 个块是 “456” 。
连接这些块后得到 “123-456” 。

示例 2:

输入:number = “123 4-567”
输出:“123-45-67”
解释:数字是 “1234567”.
步骤 1:共有超过 4 个数字,所以先取 3 个数字分为一组。第 1 个块是 “123” 。
步骤 2:剩下 4 个数字,所以将它们分成两个含 2 个数字的块。这 2 块分别是 “45” 和 “67” 。
连接这些块后得到 “123-45-67” 。

示例 3:

输入:number = “123 4-5678”
输出:“123-456-78”
解释:数字是 “12345678” 。
步骤 1:第 1 个块 “123” 。
步骤 2:第 2 个块 “456” 。
步骤 3:剩下 2 个数字,将它们放入单个含 2 个数字的块。第 3 个块是 “78” 。
连接这些块后得到 “123-456-78” 。

示例 4:

输入:number = “12”
输出:“12”
示例 5:

输入:number = "–17-5 229 35-39475 "
输出:“175-229-353-94-75”

提示:

2 <= number.length <= 100
number 由数字和字符 ‘-’ 及 ’ ’ 组成。
number 中至少含 2 个数字。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reformat-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路一:用digits记录数字。可以分为两种情况,一种是剩余数字长度大于4,那么会执行m-=3;此时m可能的情况为m>4,m=4,m=3,m=2。第二种是剩余数字长度不大于4,那么右第一种情况m的可能取值为m=4,m=3,m=2,此时再分类,m=4时两两一组,其他情况直接加上就好。

class Solution {public:string reformatNumber(string number) {int n=number.size();string digits,ans;for(int i=0;i<n;++i){if(isdigit(number[i])) digits.push_back(number[i]);}int m=digits.size();int pos=0;while(m){if(m>4){ans+=digits.substr(pos,3)+'-';pos+=3;m-=3;}else{if(m==4) ans+=digits.substr(pos,2)+'-'+digits.substr(pos+2,2);else ans+=digits.substr(pos,n);break;}}return ans;}
};

时间复杂度:O(n)
空间复杂度:O(n)

最后祝大家国庆假期愉快!!!*✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾ 好好学习天天向上。

LeetCode-1694. 重新格式化电话号码【字符串,分块】相关推荐

  1. LeetCode 1694. 重新格式化电话号码(模拟)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串形式的电话号码 number . number 由数字.空格 ' '.和破折号 '-' 组成. 请你按下述方式重新格式化电话号码. 首先,删 ...

  2. 1694. 重新格式化电话号码[简单模拟]

    思路 根据题目描述简单模拟即可: 首先将数字全部提取出来,并按三个一组分块: 然后判断分块数量,如果大于2且最后一个分块长度为1,则需要进行处理:将它们修改为2个数字一组的两个分块 class Sol ...

  3. Leetcode1694. 重新格式化电话号码[C++题解]:字符串模拟题

    文章目录 题目分析 题目链接 题目分析 数据量字符串长100. 思路: 清除空格和破折号: 三个组的个数t,余数mod:使用substr()函数处理即可. ac代码 class Solution {p ...

  4. LeetCode简单题之判断字符串的两半是否相似

    题目 给你一个偶数长度的字符串 s .将其拆分成长度相同的两半,前一半为 a ,后一半为 b . 两个字符串 相似 的前提是它们都含有相同数目的元音('a','e','i','o','u','A',' ...

  5. python字符串补空格输出_python格式化打印字符串

    格式化打印字符串 可以使用%占位符来表示格式化一个字符串 name = 'zhangsan' age = 18 print('大家好,我的名字是%s,我今年%d岁了,我今天挣了%f元钱' % (nam ...

  6. Python打印格式化与字符串

    关于Python打印格式化与字符串,比较全面的总结,希望对大家有帮助~ # -*- coding: cp936 -*- ''' 打印格式 '''print "a" print &q ...

  7. python的字符串定界符可以使用_使用Template格式化Python字符串的方法

    对Python字符串,除了比较老旧的%,以及用来替换掉%的format,及在python 3.6中加入的f这三种格式化方法以外,还有可以使用Template对象来进行格式化. from string ...

  8. php 输出text格式化,php printf() 输出格式化的字符串,phpprintf

    php printf() 输出格式化的字符串,phpprintf php printf() 函数用于输出格式化的字符串,本文章向码农介绍php printf()函数的使用方法和基本使用实例,感兴趣的码 ...

  9. C# Tostring 格式化输出字符串全解

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

最新文章

  1. 配置2008的网络与工作组环境
  2. python如何实现别人调用自己的API
  3. 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿,性能升20%,AI算力乘5倍...
  4. 【计算机组成原理】数据表示和运算
  5. 在Windows Server 2008中安装Exchange Server 2007 SP1
  6. android WPS如何绘图
  7. 印象笔记编辑html,三个小工具帮你搞定印象笔记模版
  8. 计算机管理格式化没有顺利完成,tf卡无法格式化的解决方法
  9. 软文推广丨什么是软文推广?
  10. 【Nvidia AGX Xavier】AGX Xavier使用记录
  11. 模糊神经网络2--基于ANFIS的混沌时间序列预测
  12. 基于Scrapy框架的当当网编程开发图书定向爬虫
  13. 全社会一台“云电脑”,阿里云要做新时代的Windows
  14. 重大利好:微信可以打开淘宝和抖音链接【全平台进销存软件】
  15. java 获取一天零点零分零秒时间戳
  16. 微信扫码授权登录手游的原理和问题(你使用的浏览器暂不支持微信登录)
  17. 信息系统监理师题库_软考信息系统监理师APP下载-2021软考信息系统监理师题库APP下载v10.9- 游侠下载站...
  18. 数据结构-链表、队列、栈、哈希表
  19. 10个最好的网络硬盘
  20. 长沙电销机器人排名_厂家大揭秘:电销外呼系统排名

热门文章

  1. 白噪声,有色噪声的定义、特性及其MATLAB仿真
  2. 全网最后一个免费版本,永久可用
  3. 是如何通过阿里面试的?
  4. Proftpd安装与配置
  5. 费用报销与对公付款电子化管理系统:iBox+RPA已形成自动化闭环
  6. STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板
  7. 共享锁和排他锁的区别
  8. html并排div可重叠,html – 并排堆叠div
  9. 2. Mac 命令行走代理服务器
  10. 曲线行驶最后什么时候回正_曲线行驶出弯时什么时候回正方向