重新格式化电话号码&&检查二进制字符串字段

85 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

[1694. 重新格式化电话号码]

leetcode.cn/problems/re…

image-20221002170247332

做法:

1.首先需要删除所有的空格和破折号-,用字符串str记录删除后的结果

2.定义一个结果字符串res, 然后遍历str字符串,每三个数字添加一个-

3.最后判断一下倒数第二个位置是否是-,若是,将倒数第二个位置和倒数第三个位置互换

  • 因为可能出现下面的字符串: str:1234567 -> 每三个数字都添加一个- : res: 123-456-7
  • 而此时按照题目要求:最后剩余4 个数字:拆成两个分别含 2 个数字的块
class Solution {
public:
    string reformatNumber(string number) {
        string str, res;
        //1.先删除所有的空格和破折号
        for (auto &s : number)
        {
            if (s != ' ' && s != '-') str += s;
        }
        
        res += str[0];//!!!注意先添加一个字符!!
        for (int i = 1; i < str.size(); ++i)
        {
            //每逢3个数字就添加一个'-'区分
            if (i % 3 == 0) 
                res += '-';
​
            res += str[i];
        }
        
        //例如:1234567  -> 123-456-7  如果最后剩下4个数字就会出现这种情况
        //此时需要将倒数第二个字符和倒数第三个字符交换123-456-7 -> 123-45-67
        
        if (res[res.size() - 2] == '-') 
            swap(res[res.size() - 2], res[res.size() - 3]); 
        return res;
    }
};

[1784. 检查二进制字符串字段]

leetcode.cn/problems/ch…

image-20221003100148823


首先题目是不含前导0的 -> 即第一个字符一定是1 s[0] = '1'

现在我们需要判断字符串中是否只包含零个或一个由连续个1 组成的字段

  • 字符串 s 中包含零个由连续 1组成的字段,那么整个串的表示为0000....000
  • 字符串 s 中只包含一个由连续 1 组成的字段,因为已知字符串 s 不包含前导零,所以整个串的表示为11....100...0

那么可以看到两种情况中都不包含 01 串,所以我们可以通过原字符串中是否有 01 串来判断字符串中是否只包含零个或一个由连续 11 组成的字段,如果有 0101 串则说明该情况不满足,否则即满足该情况条件

只要后面出现一个1并且前面一个字符不是1,就是false了 简单来说就是s中有“01”就不满足条件,即:除了第一个“1”,每一个“1”前面都应该是“1”,简而言之,0 后面不能有 1


写法1:

class Solution {
public:
    bool checkOnesSegment(string s) {
        char pre = s[0];
        for(int i = 1;i<s.size();i++)
        {
            //前一个字符是字符0  当前字符是字符1  出现01串
            if(pre == '0' && pre != s[i])
            {
                return false;
            }
            pre = s[i];
        }
        return true;
    }
};

写法2: 直接调用find函数找 01串 如果没有找到返回的就是npos (-1)

class Solution {
public:
    bool checkOnesSegment(string s) {
        return s.find("01") == string::npos; 
    }
};