【错题集-编程题】小红的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月前
小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)
小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)
|
1月前
|
测试技术
【错题集-编程题】添加字符(字符串)
【错题集-编程题】添加字符(字符串)
|
1月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
7月前
|
算法
代码随想录算法训练营第二十五天 | LeetCode 216. 组合总和 III、17. 电话号码的字母组合
代码随想录算法训练营第二十五天 | LeetCode 216. 组合总和 III、17. 电话号码的字母组合
40 0
|
存储 算法 Java
代码随想录训练营day25| 216.组合总和III 17.电话号码的字母组合
代码随想录训练营day25| 216.组合总和III 17.电话号码的字母组合
|
人工智能 C语言
信奥赛一本通(2034:【例5.1】反序输出)
【题目描述】 输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。 【输入】 输入一行共有n个数,每个数之间用空格隔开。 【输出】
835 0
|
设计模式 Java 编译器
这5个集合方面的问题,你都能答对吗?
这5个集合方面的问题,你都能答对吗?
这5个集合方面的问题,你都能答对吗?
|
C语言
【C语言】寻找两个‘单身狗’数
【C语言】寻找两个‘单身狗’数
【C语言】寻找两个‘单身狗’数
代码随想录刷题|LeetCode 216.组合总和III 17.电话号码的字母组合
代码随想录刷题|LeetCode 216.组合总和III 17.电话号码的字母组合