题目描述

有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能够拿到最多的宝石。

输入:

我们用每种字符代表一种宝石,A表示红宝石,B表示蓝宝石,C代表紫水晶,D代表翡翠,E代表钻石,F代表玉石,G代表玻璃等等,我们用一个全部为大写字母的字符序列表示项链的宝石序列,注意项链是首尾相接的。每行代表一种情况。

输出:

输出学者能够拿到的最多的宝石数量。每行一个

思路

  1. 设置5个位置指针和5个标志位,分别用于从第一个宝石开始往后寻找,如果找到了某个需要的宝石,则让标志位为True,并且更新该宝石的位置指针
  2. 如果5个标志位都已经被置为True了,说明已经找到了满足要求的这样一段宝石,记录这段宝石的长度,并且把当前满足要求的宝石中位置在最前面的标志位改为Fasle,然后继续往后面寻找
  3. 可以把两个字符串连接在一起模拟项链的环状结构
  4. 当前满足要求的宝石位置最靠前的已经越过了n-1(n为字符串长度),说明后面已经是重复的情况了,可以跳出。
import sys
jewelry = input();
n = len(jewelry)
jewelry = jewelry + jewelry#把两个字符串连接在一起,模拟项链的环形结构
pos = [0, 0, 0, 0, 0]#初始的ABCDE的位置
flag = [False, False,False, False,False]#初始是否已经找到了ABCDE
length = []#保存满足条件的项链段长度
for i in range(len(jewelry)):if min(pos) >= n:#如果当前位置最小的A/B/C/D/E的下标已经达到或者超过了n,说明已经出现了重复,可以跳出breakif jewelry[i] == 'A':#根据当前的宝石来更新宝石A,B,C,D,E的最后一个下标,以及是否找到过该宝石pos[0], flag[0] = i, Trueelif jewelry[i] == 'B':pos[1], flag[1] = i, Trueelif jewelry[i] == 'C':pos[2], flag[2] = i, Trueelif jewelry[i] == 'D':pos[3], flag[3] = i, Trueelif jewelry[i] == 'E':pos[4], flag[4] = i, Trueif(flag[0] & flag[1] & flag[2] & flag[3] & flag[4]):#如果5种宝石都已经出现过了,就记录当前的长度l = max(pos)-min(pos)+1length.append(l)flag[pos.index(min(pos))] = False#把当前记录的长度中最前面的那个宝石设置为False,向后继续寻找
print(n - min(length))

NowCoder(1):彩色宝石项链——搜狐2017校招编程题相关推荐

  1. 彩色宝石项链-搜狐编程

    题目要求: 有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等.有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶 ...

  2. 今日头条2017校招编程题

    贪心?瞎搞  先排个序,然后扫一遍,边扫边维护一个数组v   v的长度为3    设vs数组的最后一个是x 如果abs(a[i]-x)大于10 那么贪心的策略我就 添加个v+10相应的ans++.   ...

  3. 搜狐2017年财报可圈可点,张朝阳抓住内容风口迎来了第二春

    1月29日,搜狐发布了2017年四季度和全年财报,成为最先发财报的中概股.搜狐第四季度总收入为5.10亿美元,较2016年同期增长24%:全年总收入为18.6 亿美元,较2016增长13%,而去年这两 ...

  4. 牛客网——2017校招真题在线编程(pythonC++)

    牛客网--2017校招真题在线编程(python&C++) 1.n个数里的最小k个 题目描述 找出n个数里最小的k个 输入描述: 每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n ...

  5. 搜狗校招编程题-建房子

    @[TOC][搜狗校招编程题-建房子] 题目描述 某市政府规划建设一个新的小镇,要求小镇上的所有房屋都坐落在同一条东西向大姐的北侧并且临街(两座房子不能重叠).到目前为止,这条街上已经建造了n座房子, ...

  6. 【vivo2021届秋季校招编程题】【java】广度优先搜索(BFS)/深度优先搜索(DFS)找最短路径长度

    vivo2021届秋季校招编程题 图中 找两点间的最短路径长度 广度搜索bfs/深度搜索dfs vivo游戏中心的运营小伙伴最近接到一款新游戏的上架申请,为了保障用户体验,运营同学将按运营流程和规范对 ...

  7. 搜狐 2017秋招研发

    1:有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等.有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和 ...

  8. 搜狐2017秋招研发工程师笔试题目

    第一题:保留最大的数字 题目 给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大. 输入描述: 输入为两行内容,第一行是正整数number,1 ≤ len ...

  9. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现

    看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...

最新文章

  1. Java Iterator 使用
  2. 又一无人车玩家驶出深圳:元戎启行获近5000万美元融资,军运会提供Robo-Taxi接驳服务...
  3. ASP.NET MVC: EF 没有创建数据库表
  4. C#实现MVC模式简要方法(2)
  5. CTF Geek Challenge——第十一届极客大挑战Crypto Write Up
  6. Oracle中的in 和 not in
  7. [error] error while loading Consumer, class file '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.25-5.b18.fc2
  8. SAP UI5 ResponsiveGridLayout
  9. Java常量池理解与总结
  10. Java se之动态代理
  11. RPM包实现LAMP
  12. 随想录(windows和linux进行socket通信)
  13. .eslintrc.js相关配置
  14. 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换
  15. Mac、移动硬盘中拷贝后文件夹和文件都为灰色解决办法
  16. 计算机应用程序无响应,电脑的程序未响应是什么原因
  17. Hulu热招 | 用户身份认证团队
  18. 9:用户和权限-步入Linux的现代方法
  19. 恋爱测试题测男生软件,男友求生欲测试题大全
  20. lzx: ssh: connect to host lzx port 22: Connection timed out-------hadoop

热门文章

  1. Redis常见命令操作
  2. 【职场和发展】未来十年职场的十大发展趋势
  3. 【PR】用PR剪辑影片后导出报错:Adobe media Encoder未安装
  4. View的事件体系之二 View的滑动以及弹性滑动
  5. bzoj1797 最小割唯一性问题
  6. word2vec的基础知识
  7. POWERSHELL命令获取日期是今年的第几周
  8. 神武2手游服务器维护时间表,神武手游12月19日更新内容维护时间
  9. ML Sound Lab Amped Bundle 2022.3 CE-win 吉他电子管放大器插件合集包
  10. 物理知识相关内容总结