题目来源

  • 最长方连续方波信号

题目描述

输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可,
方波信号高位用1标识,低位用0标识,如图:

说明:
1) 一个完整的信号一定以0开始然后以0结尾,即010是一个完整信号,但101,1010,0101不是
2)输入的一串方波信号是由一个或多个完整信号组成
3) 两个相邻信号之间可能有0个或多个低位,如0110010,011000010

4) 同一个信号中可以有连续的高位,如01110101011110001010,前14位是一个具有连续高位的信号

5) 完全连续交替方波是指10交替,如01010是完全连续交替方波,0110不是

输入描述:
输入信号字符串(长度>=3且<=1024):

0010101010110000101000010
注:输入总是合法的,不用考虑异常情况
输出描述:
输出最长的完全连续交替方波信号串:

01010
若不存在完全连续交替方波信号串,输出 -1

示例1
输入
00101010101100001010010
输出
01010
备注:
输入信号串中有三个信号:0 010101010110(第一个信号段) 00 01010(第二个信号段) 010(第三个信号段)

第一个信号虽然有交替的方波信号段,但出现了11部分的连续高位,不算完全连续交替方波,
在剩下的连续方波信号串中01010最长

题目解析

这道题让我想起了leetcode:978. 最长湍流子数组的长度。但是实际上是完全不同的,它要求信号必须以0开始&&必须以0结尾,而且中间是0和1交替。

也就是说,题目中给出了两个定义:

  • 完整信号:由01交替,我们称0是波谷,1是波峰,则 两头必须是波谷中间没有连续的波谷,但可以有连续的波峰,如 0111010110 。
  • 完全连续方波信号:由01交替,且 两头必须是波谷,中间必须是波峰波谷交错,不允许有连续的波峰,如 010101010 是OK的,但 0110 是不行的。

要求求出最长的连续方波信号

我第一反应是想用动态规划来做的,但是动态规划只会计算部分信号。

这道题的意思其实是考察字符串操作,让你先把完整信号切割出来,然后在判断是不是完全连续方波信号

#include <utility>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <functional>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <random>
#include <ctime>
#include <iterator>using namespace std;class Solution{// 0101010100// 功能: 以str[i]作为起始,什么时候信号结束// 什么时候信号结束:遇到两个00时,或者到达了字符串末尾// 一定会结束,不用担心找不到结束std::string finCompleteSignal(std::string str, int start){int pos = str.find("00", start);return pos == -1 ? str.substr(start) : str.substr(start, pos - start + 1);}// 验证是否是连续交替方波bool validXYXSignal(std::string &str){return str.find("11") == -1;}public:std::string maxXYXSignal(std::string str){int i = 0;// 先将信号切割好std::vector<std::string> signalVec;while (i + 2 < str.size()){if(str[i] == '0' && str[i + 1] == '1'){auto signal = finCompleteSignal(str, i);signalVec.push_back(signal);i = i +  (int)signal.size();}else{i++;}}// 开始验证std::string ans;for(auto std : signalVec){if(validXYXSignal(std)){ans = std.size() > ans.size() ? std : ans;}}return ans;}
};int main(){std::string str =  "00101010101100001010010";Solution a;auto ans = a.maxXYXSignal(str);std::cout << (ans.empty() ? "-1" : ans) <<"\n";return 0;
}

华为机试:最长方连续方波信号相关推荐

  1. 【华为机试真题 Python实现】最长方连续方波信号

    文章目录 前言 题目描述 示例 1 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您 ...

  2. 华为机试:非严格递增连续数字序列

    [编程题目 | 100分]非严格递增连续数字序列 [ 100 / 简单 ] 非严格递增连续数字序列 题目描述: 输入一个字符串仅包含大小写字母和数字,求字符串中包含的最长的非严格递增连续数字序列的长度 ...

  3. 【华为机试真题 Python实现】2022年4、5月高频机试题

    文章目录 2022年4.5月高频机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值 ...

  4. 【华为机试 Python实现】华为机试题集合(已更新171篇)

    文章目录 新手指引 数据结构基础 华为机试真题系列 牛客网华为机试系列 Python 八股文系列 <华为机试真题详解>专栏定价99.9 包含 <华为机试真题>的所有题目. 包含 ...

  5. 华为机试:最长的指定瑕疵度的元音子串

    题目来源 华为机试:最长的指定瑕疵度的元音子串 题目描述 题目解析 滑动窗口太容易出错了 我们把它想象成一个队列,无脑往queue中塞元素,并且记录非元音的个数,当非元音的个数等于flow个时,记录最 ...

  6. 华为机试(JAVA)真题Od【A卷+B卷】

    各语言题库: [Python+JS+Java合集][超值优惠]:Py/JS/Java合集 [Python]:Python真题题库 [JavaScript]:JavaScript真题题库 [Java]: ...

  7. 华为机试(Python)真题Od【A卷+B卷】

    各语言题库: [Python+JS+Java合集][超值优惠]:Py/JS/Java合集 [Python]:Python真题题库 [JavaScript]:JavaScript真题题库 [Java]: ...

  8. 【华为机试真题Java】从入门到入职-真题列表导读

    写在前面 本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题.大家有什么不懂的都可以留言. 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100 ...

  9. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

最新文章

  1. apache httpclient 工具类_Java教程分享使用HttpClient抓取页面内容
  2. 云服务器怎么选系统,云服务器怎么选择操作系统
  3. Boost:验证atomic <>不会在成员指针上提供算术运算
  4. python在工作中怎么用_如何用python在工作中“偷懒”
  5. mysql 5.7 多主一从_mysql5.7多主一从,从机调优
  6. 5月23 注册审核
  7. 使用iframe设置frameset的高度
  8. 计算机网络 MOOC 哈尔滨工程大学 pdf课件
  9. C++ SHFileOperation实现文件、文件夹拷贝、删除、重命名
  10. 数据的存储和管理,主要有哪些好的方法?
  11. 关于String类的split方法
  12. 酷开系统AI智能让生活更简单化
  13. docker部署redis集群
  14. AddressBook/AddressBookUI
  15. 什么是迭代器(Iterator)?
  16. 明年春天见!罗永浩发声:还完债当天就重返科技行业
  17. 我的物联网项目(五)下单渠道
  18. 基于属性的访问控制(ABAC)定义与思考 ——企业ABAC的实施问题
  19. 商用车第一张,比亚迪引领汽车智能网联安全合规新趋势
  20. 小程序 - 各种小程序「微信/支付宝/百度等」 - 学习/实践

热门文章

  1. OpenDDS内部关键的idl文件(Federation)
  2. c语言fopen函数的作用是,C语言 fopen函数 参数详解
  3. 20万元启动资金,在通辽创业做什么比较好?
  4. 垂直信息流-助理类产品
  5. Ubuntu 16.04安装RealSense ROS功能包
  6. 余弦相似度-字符串相似度计算(scala)
  7. 【c++复习笔记】——智能指针详细解析(智能指针的使用,原理分析)
  8. 人工智能之Agents
  9. excel区分工时制度:如何计算996与955的工时差异
  10. 【旅游】【转载】户外运动品牌网站介绍!