[LeetCode] C ++:簡単な質問-文字列1694。電話番号を再フォーマットします

1694.電話番号を再フォーマットします

難易度6

文字列形式で電話番号を教えてください number 。number 数字、スペース' '、ダッシュ で構成されます '-' 。

電話番号を次のように再フォーマットしてください。

  • まず、 すべてのスペースとダッシュを削除します。
  • 次に、残りの4桁以下になるまで、  3つの サブブロックの各グループを含む左から右への配列 残りの数字は、次のルールに従ってブロックに分割されます。
    • 2つの数字:2つの数字を含む単一のブロック。
    • 3つの数字:3つの数字を持つ単一のブロック。
    • 4つの数字:それぞれ2つの数字を含む2つのブロック。

最後に、ブロックをダッシュ​​で接続します。再フォーマットプロセス中は、   1つの番号のみのブロックは生成されるべきではなく 2つの番号持つ最大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 桁が含まれています 

 

class Solution {
public:
    string reformatNumber(string number) {
        string buf, res;
        for(auto ch: number){
            if(isdigit(ch)){
                buf.push_back(ch);
            }
        }
        for(int i = 0; i < buf.size(); i++){
            if(i != 0 && i % 3 == 0 && buf.size()-i > 1){
                res.push_back('-');
            }else if(i != 0 && i % 3 == 0 && i == buf.size()-1){
                char ch = res.back();
                res.pop_back();
                res.push_back('-');
                res.push_back(ch);
            }
            res.push_back(buf[i]);
        }
        return res;
    }
};

 

おすすめ

転載: blog.csdn.net/weixin_44566432/article/details/113483865