1694. 重新格式化电话号码

知识浅谈 🐄🐄🐄🐄🐄大佬
后端领域优质创作者
博客专家认证
2022-10-01 09:53:00

题意

给你一个字符串形式的电话号码 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" 。

题解

class Solution {
    public String reformatNumber(String number) {
        StringBuilder sb = new StringBuilder();
        char[] chs = number.toCharArray();
        for(char c:chs)
            if(c!=' '&&c!='-') sb.append(c);
        int len = sb.length();
        int index=0;
        StringBuilder sb1 = new StringBuilder();
        if(len<3) sb1.append(sb);
        else if(len==4) sb1.append(sb.substring(0,2)+"-"+sb.substring(2,4));
        else {
            sb1.append(sb.substring(index,index+3));
            index+=3;
            for(int i=index;i<len;){
                sb1.append("-");
                if(i+4==len){
                    sb1.append(sb.substring(i,i+2)+"-"+sb.substring(i+2,i+4));
                    i+=4;
                }else if(i+2==len){
                    sb1.append(sb.substring(i,i+2));
                    i+=2;
                }else{
                    sb1.append(sb.substring(i,i+3));
                    i+=3;
                }
            }
        }
        return sb1.toString();
    }
}

img

...全文
140 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

15,098

社区成员

发帖
与我相关
我的任务
社区描述
知识浅谈(带你学后端)社区,旨在为学习后端的小伙伴提供技术内容共享学习平台,助力每位小伙伴写出高质量代码,欢迎各位小伙伴的加入。
java爬虫后端 个人社区 吉林省·长春市
社区管理员
  • 知识浅谈
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【社区倡导与禁止】

  • 社区倡导积极发帖,互相交流技术问题,学习心得。
  • 社区不限制技术领域,后端内容增加加精权重
  • 社区禁止发布低俗、不健康的内容

【社区积分规则】

  • 在社区「发帖」得10积分
  • 内容被管理员「加精」得10积分
  • 点赞他人内容得1积分
  • 评论内容得2积分

试试用AI创作助手写篇文章吧