【错题集-编程题】小红的ABC(字符串 + 找规律)

简介: 【错题集-编程题】小红的ABC(字符串 + 找规律)


一、分析题目

算法思路:由于题目要找的是最短的回文子串,并且只有三个字母:a、b、c,因此最短的回文子串的长度要么是 2,要么是 3。因此,我们仅需枚举所有的⼆元组以及三元组就好了。


二、代码

1、看题解之前AC的代码

#include <iostream>
using namespace std;
 
int main()
{
    string s;
    cin >> s;
    int n=s.size();
    int len=101;
    for(int i=0; i<n; i++)
    {
        //奇数长度的扩展
        int left=i, right=i;
        while(left>=0 && right<n && s[left]==s[right])
        {
            if(right-left+1<len && right-left+1>1) len=right-left+1;
            left--;
            right++;
        }
 
        //偶数长度的扩展
        left=i, right=i+1;
        while(left>=0 && right<n && s[left]==s[right])
        {
            if(right-left+1<len && right-left+1>1) len=right-left+1;
            left--;
            right++;
        }
    }
    if(len>1 && len<101) cout << len << endl;
    else cout << -1 << endl;
    return 0;
}

2、值得学习的代码

#include <iostream>
#include <string>
 
using namespace std;
 
string s;
 
int main()
{
    cin >> s;
    int ret = -1; // 有可能并没有回⽂串
    int n = s.size();
 
    for(int i = 0; i < n; i++)
    {
        if(i + 1 < n && s[i] == s[i + 1]) // 判断⻓度为 2 的⼦串
        {
            ret = 2;
            break;
        }
        if(i + 2 < n && s[i] == s[i + 2]) // 判断⻓度为 3 的⼦串
        {
            ret = 3;
        }
    }
 
    cout << ret << endl;
 
    return 0;
}

三、反思与改进

没仔细看题目要求我就直接按着之前写过的:5. 最长回文子串 - 力扣(LeetCode)思路去写了,忽略了题目要找的是最短的回文子串,并且只有三个字母:a、b、c 这一要求,审题不仔细!


相关文章
|
1月前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
48 0
|
1月前
lanqiao oj 1203 小明的字符串
lanqiao oj 1203 小明的字符串
10 0
|
6月前
|
测试技术
【错题集-编程题】添加字符(字符串)
【错题集-编程题】添加字符(字符串)
|
6月前
|
canal Java
java字符串练习题7、验证回文串
java字符串练习题7、验证回文串
90 0
|
C语言
【C语言】寻找两个‘单身狗’数
【C语言】寻找两个‘单身狗’数
【C语言】寻找两个‘单身狗’数
|
人工智能 C++
蓝桥杯练习题十三 - 猜字母(c++)
蓝桥杯练习题十三 - 猜字母(c++)
153 0
#yyds干货盘点# 第三十五题-字符串字符统计
#yyds干货盘点# 第三十五题-字符串字符统计
95 0
#yyds干货盘点# 第三十五题-字符串字符统计
2015年蓝桥杯 题六 奇妙的数字 填空题 (全排列+check+转字符串)
2015年蓝桥杯 题六 奇妙的数字 填空题 (全排列+check+转字符串)
|
算法
【字符串】最小表示法—题型讲解
【字符串】最小表示法—题型讲解
151 0