1 条题解
-
0
解题思路
- 问题分析:题目要求找出字符串中是否存在可以连续约简的模式,最终得到最短可能长度。
- 关键观察:当字符串中存在相隔一个字符的相同字符(即s[i] == s[i+2])时:
- 如果字符串长度为奇数,可以约简到长度为1
- 如果字符串长度为偶数,可以约简到长度为2
- 特殊情况:如果没有上述模式,则字符串无法约简,保持原长度。
算法实现
- 输入处理:读取字符串并获取其长度
- 模式检测:遍历字符串检查是否存在s[i] == s[i+2]的情况
- 结果确定:
- 发现模式且长度为奇数 → 最小长度为1
- 发现模式且长度为偶数 → 最小长度为2
- 未发现模式 → 保持原长度
复杂度分析
- 时间复杂度:O(n),只需一次线性扫描字符串
- 空间复杂度:O(1),仅使用常数额外空间
#include <cstdio> #include <cstring> using namespace std; char s[256]; int main(){ scanf("%s",s); int len=strlen(s); int ans=len; for(int i=0;i+2<len;i++) if(s[i]==s[i+2]) if(len%2) ans=1; else ans=2; printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 2402
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者