news 2026/8/4 18:26:56

笔试强训 Day 33:跳台阶扩展问题、包含不超过两种字符的最长子串、字符串的排列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笔试强训 Day 33:跳台阶扩展问题、包含不超过两种字符的最长子串、字符串的排列

Day 33

跳台阶扩展问题

解题思路:可以把跳跃过程先看成连续的n个“1级台阶”。

n = 3为例:

1 1 1

这 3 个1之间有n - 1 = 2个间隙:

1 | 1 | 1

每个间隙有两种选择:

所有情况如下:

不分隔: 3 -> 跳 3 级 第1处分隔:1 + 2 第2处分隔:2 + 1 两处分隔:1 + 1 + 1

表示有 n 个阶梯, n-1 个阶梯间隙,每个间隙有断开,不断开两种情况,所以总选择数是:

[ \underbrace{2 \times 2 \times \cdots \times 2}_{n-1\text{个间隙}} =2^{n-1} ]

所以共有:

2^(n-1) = 2^2 = 4

代码实现:

importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);intn=in.nextInt();System.out.println(1<<(n-1));}}

<<是 Java 中的左移运算符。

1 << (n - 1)

表示把数字1的二进制向左移动n - 1位。每向左移动一位,数值就乘以2,因此:

[ 1 << (n-1)=2^{n-1} ]

例如n = 3

1 的二进制: 0001 向左移动 2 位: 0100 十进制结果: 4

对应代码:

int result = 1 << (n - 1); System.out.println(result);

也可以使用数学函数:

int result = (int) Math.pow(2, n - 1);

不过这道题使用位运算更直接,而且n <= 20,结果不会超出int的范围。

包含不超过两种字符的最长子串

解题思路:

代码实现:

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);char[]s=in.next().toCharArray();intret=0;int[]hash=newint[26];intkind=0;for(intl=0,r=0;r<s.length;r++){hash[s[r]-'a']++;if(hash[s[r]-'a']==1)kind++;if(kind<=2){ret=Math.max(ret,r-l+1);}while(kind>2){hash[s[l]-'a']--;if(hash[s[l]-'a']==0)kind--;l++;}}System.out.println(ret);}}

字符串的排列

解题思路:

代码实现:

importjava.util.*;publicclassSolution{privatechar[]s;privateboolean[]check;privateintn;privateStringBuilderpath;privateArrayList<String>ret;publicArrayList<String>Permutation(Stringstr){s=str.toCharArray();Arrays.sort(s);n=s.length;check=newboolean[n];path=newStringBuilder();ret=newArrayList<>();dfs(0);returnret;}// depth 表示递归层数privatevoiddfs(intdepth){if(path.length()==n){ret.add(path.toString());return;}for(inti=0;i<n;i++){// 该字符已经被使用过if(check[i]){continue;}// 同一层中,相同字符只选择一次// !check[i - 1] 用于处理 aa 字符的排序情况// 相同字符必须按照下标顺序使用,先用前面的 a,再用后面的 a,这样既不会漏掉排列,也不会产生重复排列。if(i>0&&s[i]==s[i-1]&&!check[i-1]){continue;}path.append(s[i]);check[i]=true;dfs(depth+1);check[i]=false;path.deleteCharAt(path.length()-1);}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/4 18:24:38

喜马拉雅下载器完整指南:轻松下载VIP和付费专辑

喜马拉雅下载器完整指南&#xff1a;轻松下载VIP和付费专辑 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 xmly-downloader-qt5是…

作者头像 李华
网站建设 2026/8/4 18:24:38

WPS在苹果生态中的演进与挑战

1. WPS iPad版登顶背后的生态逻辑 当WPS Office在iPad应用商店登顶效率类应用榜首时&#xff0c;这个现象远比表面看到的更有深意。作为一款跨平台办公软件&#xff0c;WPS在iPad端的成功实际上揭示了苹果生态演进的三个阶段变化&#xff1a; 首先是文件兼容性壁垒的打破。早期…

作者头像 李华
网站建设 2026/8/4 18:24:36

UG NX安装后必做设置:从界面优化到后处理配置全攻略

大家好&#xff0c;我是长期分享工业软件实战经验的博主。很多朋友在成功安装UG NX&#xff08;也称Siemens NX&#xff09;后&#xff0c;面对复杂的界面和众多选项&#xff0c;常常感到无从下手&#xff0c;不知道哪些设置是必须的&#xff0c;哪些能极大提升工作效率。本文将…

作者头像 李华
网站建设 2026/8/4 18:17:35

2025届必备的AI辅助写作平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 因AI写作普及开来, 内容原创性检测变得越发严格起来。好多创作者陷入AI痕迹会被识别出来的困…

作者头像 李华
网站建设 2026/8/4 18:16:49

Java程序员收藏!从后端开发转向AI大模型应用开发的实战路线图

本文针对Java程序员在AI大模型时代面临的转型焦虑&#xff0c;提出不必从零学习算法&#xff0c;而是应聚焦AI应用开发。文章强调Java程序员的核心竞争力在于将AI能力落地业务系统&#xff0c;并提供从基础概念学习到项目落地的学习步骤&#xff0c;包括使用Java接入大模型API、…

作者头像 李华