1 条题解

  • 0
    @ 2025-5-27 22:35:13

    解题思路

    1. 问题分析:题目要求找出字符串中是否存在可以连续约简的模式,最终得到最短可能长度。
    2. 关键观察:当字符串中存在相隔一个字符的相同字符(即s[i] == s[i+2])时:
      • 如果字符串长度为奇数,可以约简到长度为1
      • 如果字符串长度为偶数,可以约简到长度为2
    3. 特殊情况:如果没有上述模式,则字符串无法约简,保持原长度。

    算法实现

    1. 输入处理:读取字符串并获取其长度
    2. 模式检测:遍历字符串检查是否存在s[i] == s[i+2]的情况
    3. 结果确定
      • 发现模式且长度为奇数 → 最小长度为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
    上传者