2019年三峡大学新生编程赛||破解密码

2019年三峡大学新生编程赛中,参赛者需解决一个密码破解问题。给定一长串字符,目标是找到其中不包含重复字符的最长子串。题目提供输入输出描述、限制条件,并分享了解题思路,通过判断字符避免重复,以求得最长子串,适合考察编程能力和字符串处理技巧。
摘要由CSDN通过智能技术生成

2019年三峡大学新生编程赛

7.破解密码

(1)题目内容:

作为出题组中一名热爱运动的探险家,小Y喜欢上山下乡去寻找宝藏,这一次他选择去三峡大学求索溪边的翠屏山上进行探索,经历重重困难,小Y终于找到了宝箱。小Y十分的开心。
然而这个宝箱需要密码才能打开。
但是破解密码怎么会难倒我们的探险家小Y呢?所以他仔细的观察了宝箱。
在宝箱前的一个石碑上刻着一长串的字符,显然密码就隐藏在里面。经验丰富的他迅速地明白了破解密码的方式,但是这段字符实在太长了,所以小Y就找来了你来帮助他解决。
密码就是这串字符中含有不重复字符的最长子串,因为密码就只有一个,所以这样的子串只有一个。
(串中任意个连续的字符组成的子序列称为该串的子串)

(2)输入描述

输入一个字符串s(1 <= s的长度 <= 1e6)

(3)输出描述

输出一行,表示该字符串中含有不重复字符的最长子串

(4)输入样例

absadfasddfas

(5)输出样例

bsadf

(6)限制条件

JAVA 运行时间 2000ms 运行内存 3000kb
C++ 运行时间 1000ms 运行内存 3000kb

(7)程序代码

#include <stdio.h>
#include <string.h>
struct {
  char date[1000050];
  int head;
  int tail;
} queue, itemp;

int main() {
  gets(queue.date);
  int num = strlen(queue.date);
  queue.head = 0;
  queue.tail = num;
  int len = 0;
  int i;
  while (1) {
    int book[1000] = {0};
    for (i = queue.head; i < queue.tail; i++) {
      book[queue.date[i]]++;
      if (book[queue.date[i]] > 1 || i == num - 1) {
        queue.tail = i;
        if (len < queue.tail - queue.head) {
          len = queue.tail - queue.head;
          itemp.head = queue.head;
          itemp.tail = queue.tail;
        }
        queue.head++;
        queue.tail = num;
        break;
      }
    }
    if (i == num - 1) break;
  }
  for (i = itemp.head; i < itemp.tail; i++) printf("%c", queue.date[i]);
  return 0;
}

(8)解题思路以及题目分析

本题根据题意,是求不含重复字符的最大字串,如果暴力硬解很有可能会导致超时,于是可以选择上述代码的方式,从第一项开始往后判断,如果没有出现重复字符就继续往后面存,一旦出现了重复的情况就再往后进行判断,比较字符串的长度,选取最大长度输出,具体实现见上述代码。

(9)题目总结

此题难度适中,主要在于如何找到最长字符串的思想以及如何判断是否存在重复字符的最简单方法,上述代码中使用对应字符的ASCII码为下标的数组记录显然是最简单的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值