华为非AI方向笔试真题 7月1号【字符串压缩与模式验证】
字符串压缩与模式验证(C/Py/Java/Js/Go)题解华为笔试真题 7月1号 非AI方向第一题 100分题型题目内容给定一个字符串sss请你判断它是否由一个较短的字符串重复多次构成。如果可以输出最短的重复段字符串重复次数否则输出字符串本身。例如“abababababab” 可以由 “ababab” 重复222次得到输出ab2ab2ab2。“abcabcabcabcabcabcabcabcabc” 可以由 “abcabcabc” 重复333次得到输出abc3abc3abc3。“aaaaaaaaaaaa” 可以由 “aaa” 重复444次得到也可以由 “aaaaaa” 重复222次得到按照最短的字符串输出输出a4a4a4。“ababaababaababa” 无法由某个子串重复多次构成输出ababaababaababa。输入描述一个字符串sss仅包含数字000-999、小写字母aaa-zzz、大写字母AAA-ZZZ字符串长度1≤n≤1061 \le n \le 10^61≤n≤106。输出描述一段字符串s_news\_news_news_news\_news_new重复次数字符串长度1≤n≤1061 \le n \le 10^61≤n≤106。样例1输入aaabbb输出aaabbb说明它无法被分割成至少两个完全相同的部分。题解和思路思路实现思路kmp如果s是循环拼接说明整个字符串最长相同前缀后缀肯定是存在大于0(这就代表next[n-1]一定要 大于 0)。先说结论如果k next[n-1], (n % (n - k) 0)则说明 s[: n- k]就是循环子串。可以简单推导一下假设直接用x表示最小循环子串那么字符串一定为循环子串重复而来类似与xxxxx假设k个x这时候来分析末尾最长公共前缀后缀长度肯定为(k-1) * x。 对应上面方程(n k * x.size()) 计算出来的最小循环数组就为x,也肯定可以整除的。代码总体时间复杂为OnC#includeiostream#includevector#includestring#includeutility#includesstream#includealgorithmusingnamespacestd;// kmp 算法求next数组vectorintgetNext(string s){intns.size();vectorintnext(n,0);for(inti1;in;i){intjnext[i-1];while(j0s[i]!s[j]){jnext[j-1];}if(s[i]s[j]){j1;}next[i]j;}returnnext;}intmain(){string s;cins;intns.size();vectorintnextgetNext(s);intprefixLennext[n-1];// 是由部分子串重复循环拼接组成if(prefixLen0(n%(n-prefixLen)0)){string anss.substr(0,n-prefixLen);intrepeaten/(n-prefixLen);coutansrepeate;}else{couts;}return0;}Javaimportjava.util.*;publicclassMain{// kmp 算法求next数组publicstaticint[]getNext(Strings){intns.length();int[]nextnewint[n];for(inti1;in;i){intjnext[i-1];while(j0s.charAt(i)!s.charAt(j)){jnext[j-1];}if(s.charAt(i)s.charAt(j)){j;}next[i]j;}returnnext;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringssc.next();intns.length();int[]nextgetNext(s);intprefixLennext[n-1];// 是由部分子串重复循环拼接组成if(prefixLen0(n%(n-prefixLen)0)){Stringanss.substring(0,n-prefixLen);intrepeatn/(n-prefixLen);System.out.print(ansrepeat);}else{System.out.print(s);}}}python# kmp 算法求next数组defgetNext(s):nlen(s)nxt[0]*nforiinrange(1,n):jnxt[i-1]whilej0ands[i]!s[j]:jnxt[j-1]ifs[i]s[j]:j1nxt[i]jreturnnxtdefmain():sinput()nlen(s)nxtgetNext(s)prefixLennxt[n-1]# 是由部分子串重复循环拼接组成ifprefixLen0and(n%(n-prefixLen)0):anss[:n-prefixLen]repeatn//(n-prefixLen)print(f{ans}{repeat},end)else:print(s,end)if__name____main__:main()Javascriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});letinput[];rl.on(line,(line){input.push(line);});rl.on(close,(){constsinput[0];// kmp 算法求next数组functiongetNext(s){constns.length;constnextnewArray(n).fill(0);for(leti1;in;i){letjnext[i-1];while(j0s[i]!s[j]){jnext[j-1];}if(s[i]s[j]){j;}next[i]j;}returnnext;}constns.length;constnextgetNext(s);constprefixLennext[n-1];// 是由部分子串重复循环拼接组成if(prefixLen0(n%(n-prefixLen)0)){constanss.substring(0,n-prefixLen);constrepeatn/(n-prefixLen);process.stdout.write(ansrepeat);}else{process.stdout.write(s);}});Gopackagemainimport(bufiofmtos)// kmp 算法求next数组funcgetNext(sstring)[]int{n:len(s)next:make([]int,n)fori:1;in;i{j:next[i-1]forj0s[i]!s[j]{jnext[j-1]}ifs[i]s[j]{j}next[i]j}returnnext}funcmain(){in:bufio.NewReader(os.Stdin)varsstringfmt.Fscan(in,s)n:len(s)next:getNext(s)prefixLen:next[n-1]// 是由部分子串重复循环拼接组成ifprefixLen0(n%(n-prefixLen)0){ans:s[:n-prefixLen]repeat:n/(n-prefixLen)fmt.Print(ans,repeat)}else{fmt.Print(s)}}

相关新闻

大模型推理工具vLLM、llama.cpp与Ollama性能对比评测

大模型推理工具vLLM、llama.cpp与Ollama性能对比评测

1. 项目概述:大模型推理工具的性能对决当我们在本地或云端部署大语言模型时,经常会遇到一个令人头疼的问题:显卡利用率低下。明明配备了高端GPU,但实际运行时的显存占用和计算负载却常常低于预期。这种现象在大模型推理场景中尤为…

2026/11/5 20:28:14 阅读更多 →
SpringBoot集成大模型API构建医疗影像辅助诊断系统实战

SpringBoot集成大模型API构建医疗影像辅助诊断系统实战

如果你是一名计算机专业的学生,正在为毕业设计选题而焦虑,既想做一个有技术深度、能体现个人能力的项目,又担心技术栈太复杂、时间不够用,那么这篇文章就是为你准备的。 “SpringBoot 大模型的医疗影像辅助诊断系统”&#xff0…

2026/11/1 20:40:41 阅读更多 →
维持源码检出状态:构建可重现性与版本溯源的工程基石

维持源码检出状态:构建可重现性与版本溯源的工程基石

1. 项目概述:为什么“维持源码检出状态”是工程落地的隐形地基在日常协作开发、CI/CD流水线维护、甚至个人项目长期演进中,你是否遇到过这样的场景:上周还能顺利编译的代码,今天git pull后突然报错找不到某个头文件;Je…

2026/11/7 22:19:38 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/8 1:19:03 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/8 1:35:05 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/8 1:38:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/8 1:23:14 阅读更多 →

日新闻

周新闻

月新闻