在 C++ 中检查二进制字符串是否在任何地方连续出现两次 1

c++server side programmingprogramming

这里我们会看到另一个有趣的问题。我们必须编写一个接受字符串的代码,该字符串具有以下标准。

  • 每组连续的 1 的长度必须为 2
  • 每组连续的 1 必须出现在 1 个或多个 0 之后

假设有一个字符串,如 0110,这是有效字符串,001110、010 都无效

这里的方法很简单。我们必须找到 1 的出现,并检查它是否是子字符串 011 的一部分。如果条件不成立,则对于任何子字符串返回 false,否则返回 true。

示例

#include <bits/stdc++.h>
using namespace std;
bool isValidStr(string str) {
   int n = str.length();
   int index = find(str.begin(), str.end(), '1') - str.begin();
   if (index == 0) //当字符串以 1 开头时,返回 false
   return false;
   while (index <= n - 1) {
      if (str[index - 1] != '0') // 如果 1 没有出现在 0 之后
         return false;
      if (index + 1 < n && str[index + 1] != '1') // 如果 '1' 后面没有另一个 '1'
         return false;
      if (index + 2 < n && str[index + 2] == '1') // 如果子字符串的类型为"0111"
         return false;
      if (index == n - 1) // 如果 str 以单个 1 结尾
         return false;
      index = find(str.begin() + index + 2, str.end(), '1') - str.begin();
   }
   return true;
}
int main() {
   string str = "011000110110";
   if(isValidStr(str)){
      cout << str << " is a valid string";
   } else {
      cout << str << " is NOT a valid string";
   }
}

输出

011000110110 is a valid string

相关文章