news 2026/10/1 21:01:03

小红书笔试真题 9.13 - 避重口令(C++/Py/Java /Js/Go)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红书笔试真题 9.13 - 避重口令(C++/Py/Java /Js/Go)

避重口令

小红书 9月13号 笔试真题 第一题

题目描述

短视频审核后台要把已过审成片的标题按发布时间依次拼接,得到小写字符串SSS。SSS的每一个子序列(含SSS本身与空串)都被视为已经占用的口令,不能再给新专题使用。
求最短的、不是SSS子序列的小写口令长度。
子序列:从原串中删除任意个(可以为零个)字符后,剩余字符保持相对顺序所形成的串。

输入描述

一行,仅含小写字母的字符串SSS(1≤∣S∣≤1051\le |S|\le 10^51≤∣S∣≤105)。

输出描述

一行一个正整数,即最短未占用口令的长度。

样例1

输入

zyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcba

输出

3

说明
SSS由两段倒序的262626个小写字母拼接而成。任意单个字母、任意长度为222的小写串都是SSS的子序列(前半段取第一个字符、后半段取第二个字符即可)。SSS中字母aaa只出现两次,故aaa不是子序列,最短长度为333。

题解和思路

思路

实现思路:动态规划

  1. 定义dp数组,其中dp[i]表示从 S[i...n-1] 开始,最短的、不是 S[i...n-1] 子序列的字符串长度
  2. 对于当前位置i
    • 如果某个字符c在s[i...]根本不存在,那么单个字符c就已经不是子序列,所以dp[i] = 1
    • 否则,选择一个字符c,第一次匹配到它的位置是j,那么后面还需要找一个不是S[j+1...]子序列的字符串。因此dp[i] = min(d[i], 1 + dp[j] + 1)
  3. 时间复杂度为O(N)

C++

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin>>s;intn=s.size();// i之后最近c的位置vector<vector<int>>nxt(n+1,vector<int>(26));for(intc=0;c<26;c++){nxt[n][c]=n;}for(inti=n-1;i>=0;i--){nxt[i]=nxt[i+1];nxt[i][s[i]-'a']=i;}constintINF=1e9;// 从 S[i...n-1] 开始,最短的、不是 S[i...n-1] 子序列的字符串长度vector<int>dp(n+1,INF);// 空串之后,不存在任何字符可以匹配dp[n]=1;for(inti=n-1;i>=0;i--){for(intc=0;c<26;c++){intj=nxt[i][c];if(j==n){//字符 c 在后面不存在dp[i]=1;}else{dp[i]=min(dp[i],1+dp[j+1]);}}}cout<<dp[0]<<endl;return0;}

Java

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Strings=sc.next();intn=s.length();// i之后最近c的位置int[][]nxt=newint[n+1][26];for(intc=0;c<26;c++){nxt[n][c]=n;}for(inti=n-1;i>=0;i--){System.arraycopy(nxt[i+1],0,nxt[i],0,26);nxt[i][s.charAt(i)-'a']=i;}finalintINF=1000000000;// 从 S[i...n-1] 开始,最短的、不是 S[i...n-1] 子序列的字符串长度int[]dp=newint[n+1];Arrays.fill(dp,INF);// 空串之后,不存在任何字符可以匹配dp[n]=1;for(inti=n-1;i>=0;i--){for(intc=0;c<26;c++){intj=nxt[i][c];if(j==n){// 字符 c 在后面不存在dp[i]=1;}else{dp[i]=Math.min(dp[i],1+dp[j+1]);}}}System.out.println(dp[0]);}}

python

importsys s=sys.stdin.readline().strip()n=len(s)# i之后最近c的位置nxt=[[n]*26for_inrange(n+1)]foriinrange(n-1,-1,-1):nxt[i]=nxt[i+1].copy()nxt[i][ord(s[i])-ord('a')]=i INF=10**9# 从 S[i...n-1] 开始,最短的、不是 S[i...n-1] 子序列的字符串长度dp=[INF]*(n+1)# 空串之后,不存在任何字符可以匹配dp[n]=1foriinrange(n-1,-1,-1):forcinrange(26):j=nxt[i][c]ifj==n:# 字符 c 在后面不存在dp[i]=1else:dp[i]=min(dp[i],1+dp[j+1])print(dp[0])

Javascript

constreadline=require('readline');constrl=readline.createInterface({input:process.stdin,output:process.stdout});rl.on('line',(s)=>{s=s.trim();constn=s.length;// i之后最近c的位置constnxt=Array.from({length:n+1},()=>newArray(26).fill(n));for(letc=0;c<26;c++){nxt[n][c]=n;}for(leti=n-1;i>=0;i--){nxt[i]=[...nxt[i+1]];nxt[i][s.charCodeAt(i)-97]=i;}constINF=1e9;// 从 S[i...n-1] 开始,最短的、不是 S[i...n-1] 子序列的字符串长度constdp=newArray(n+1).fill(INF);// 空串之后,不存在任何字符可以匹配dp[n]=1;for(leti=n-1;i>=0;i--){for(letc=0;c<26;c++){constj=nxt[i][c];if(j===n){// 字符 c 在后面不存在dp[i]=1;}else{dp[i]=Math.min(dp[i],1+dp[j+1]);}}}console.log(dp[0]);rl.close();});

Go

packagemainimport("bufio""fmt""os")funcmain(){in:=bufio.NewReader(os.Stdin)out:=bufio.NewWriter(os.Stdout)deferout.Flush()varsstringfmt.Fscan(in,&s)n:=len(s)// i之后最近c的位置nxt:=make([][]int,n+1)fori:=0;i<=n;i++{nxt[i]=make([]int,26)forc:=0;c<26;c++{nxt[i][c]=n}}fori:=n-1;i>=0;i--{copy(nxt[i],nxt[i+1])nxt[i][s[i]-'a']=i}constINF=int(1e9)// 从 S[i...n-1] 开始,最短的、不是 S[i...n-1] 子序列的字符串长度dp:=make([]int,n+1)fori:=0;i<=n;i++{dp[i]=INF}// 空串之后,不存在任何字符可以匹配dp[n]=1fori:=n-1;i>=0;i--{forc:=0;c<26;c++{j:=nxt[i][c]ifj==n{// 字符 c 在后面不存在dp[i]=1}else{ifdp[i]>1+dp[j+1]{dp[i]=1+dp[j+1]}}}}fmt.Fprintln(out,dp[0])}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 20:59:15

Aruba 70xx Master Redundancy配置与切换验证

1. 先搞清楚 70xx 上 Master Redundancy 到底在保什么 Aruba 无线控制器 70xx 系列&#xff0c;很多朋友是拿它当中小园区或者分支机构的"大脑"来用的。到 8.x 版本&#xff0c;AOS 的架构彻底转向了 Master / Local 分层&#xff0c;Controller 的角色被拆得更细。8…

作者头像 李华
网站建设 2026/10/1 20:56:23

MKS SKIPR-单片机代码编译

一、编译源码 1.1、下载源码及参考 参考&#xff1a; STM32F103C8T6 编译Klipper下位机固件参数设置 -- 编译配置选项参考《MKS SKIPR V1.0安装Klipper&#xff08;ALLCCT200 3D打印机升Klipper固件全过程&#xff09; - 哔哩哔哩》文章 下载 git clone https://github.c…

作者头像 李华
网站建设 2026/10/1 20:55:20

从关键词排名到信源采信:GEO如何改写企业内容运营逻辑

一、多模态AI搜索的四个常见问题多模态AI搜索正在改变信息获取方式&#xff0c;但企业内容运营者常面临几个现实困惑。第一&#xff0c;传统关键词排名带来的流量为何在AI搜索场景下转化乏力&#xff1f;第二&#xff0c;大模型引用企业内容时&#xff0c;依据的究竟是什么标准…

作者头像 李华
网站建设 2026/10/1 20:54:27

实测才敢推!2026年公认好用的专业AI论文平台

2026年AI论文写作工具已从“内容生成”进化为集文献管理、逻辑构建、格式规范与合规检测于一体的全流程学术平台&#xff0c;核心评价维度包括文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规性等。本次测评覆盖6款主流工具&#xff0c;涵盖中英文、全流程与专项功能、…

作者头像 李华
网站建设 2026/10/1 20:54:04

浏览器请求到不了后台?从DNS到WAF逐层排查实战

先说个结论&#xff1a;这类问题的麻烦之处&#xff0c;从来不是后台服务本身有多复杂&#xff0c;而是从你敲下回车到请求落到服务端&#xff0c;中间隔了太多层"看不见的关卡"。我在一线处理过不少类似Case&#xff0c;前端同事说"接口我调了&#xff0c;后台…

作者头像 李华