【编程题-错题集】非对称之美(找规律 / 贪心)

简介: 【编程题-错题集】非对称之美(找规律 / 贪心)

牛客对应题目链接:非对称之美 (nowcoder.com)


一、分析题目

找规律

  1. 判断是否全都是相同字符
  2. 判断本身是否是回文
  • 如果这个字符串每个字符相同,不存在非回文子串,直接返回 0。
  • 如果这个字符串不是回文,输出字符串长度。
  • 贪心:如果这个字符串是回文,输出这个字符串长度 -1。(重点:最后返回 n-1 的含义)

二、代码

//值得学习的代码
#include <iostream>
#include <string>
 
using namespace std;
 
int n;
string s;
 
int fun()
{
    // 1. 判断是否全都是相同字符
    bool flag = false;
    for(int i = 1; i < n; i++)
    {
        if(s[i] != s[0])
        {
            flag = true;
            break;
        }
    }
    if(flag == false) return 0;
 
    // 2. 判断本⾝是否是回⽂
    flag = true;
    int left = 0, right = n - 1;
    while(left < right)
    {
        if(s[left] == s[right])
        {
            left++;
            right--;
        }
        else
        {
            flag = false;
            break;
        }
    }
 
    if(flag) return n - 1;
    else return n;
}
 
int main()
{
    cin >> s;
    n = s.size();
 
    cout << fun() << endl;
 
    return 0;
}

三、反思与改进

拿到这道题时,我想起了之前写过的5. 最长回文子串 - 力扣(LeetCode),不过它是回文(对称)的,这里要求找的是最长非回文字串的长度,所以我就按着之前的思路去思考,也是将其分为奇数长度和偶数长度的扩展来想。不过,我发现这种思路会导致一些重复字符组成的子串没法得出正确结果,但又不知道该从哪里改起,所以需要转换一下思路。

这道题目没有太多其它的技巧,就是直接找规律,也可以说是贪心,是从非回文的特性来找出非回文的最长字串长度。


相关文章
|
7月前
|
算法 测试技术 C++
【动态规划】C++ 算法458:可怜的小猪
【动态规划】C++ 算法458:可怜的小猪
|
7月前
|
算法 Python
Python技术分享:使用穷举法解决鸡兔同笼问题
Python技术分享:使用穷举法解决鸡兔同笼问题
326 1
|
7月前
|
算法 测试技术 C++
【动态规划】【数学】【C++算法】18赛车
【动态规划】【数学】【C++算法】18赛车
|
7月前
|
机器学习/深度学习 算法 机器人
【动态规划】【C++算法】741摘樱桃
【动态规划】【C++算法】741摘樱桃
|
算法 调度
算法基础课第八章动态规划和贪心算法
算法基础课第八章动态规划和贪心算法
116 0
算法基础课第八章动态规划和贪心算法
|
算法
几道算法题很简单
《基础系列》
90 0
|
人工智能 算法 搜索推荐
几道算法题练习下
《基础系列》
66 0
|
存储 机器学习/深度学习 算法
|
算法 搜索推荐 索引