zoukankan      html  css  js  c++  java
  • 【字符串/回文子串个数】大战幻想珠

    题目描述

    烤乐滋又生日了!占虽然过去了整整一年,可他还是对去年发生的炸弹事件充满阴影。于是决定不让来访的好友们自带礼物。
    但生日怎么能没有礼物昵?烤乐滋决定拿出他的幻想珠串来.幻想珠是一颗上面写着小写英文字母的珠子。有些珠子自带神奇的魔力,上面写着一个”?”,就表示这颗珠子可以表示任意一个小写英文字母。幻想珠串是长长的一个个幻想珠首尾相连组成的串。烤乐滋决定,让每个朋友从这个珠串中挑选一段连续的串送给自己。
    烤乐滋很喜欢回文(从前往后和从后往前读一样),于是他希望朋友挑选出的串都是回文的。比如”ababa”和” acd?a”都是回文的,而”a?d?c”就不是回文的。
    烤乐滋想要知道,整个幻想珠串中一共能挑选出多少个回文的子串。两个位置不同内容相同的子串我们也视作是不同的子串。

    输入

    第一行一个数n(n≤3000),表示幻想珠串的长度。
    第二行一个有n 个字符.只可能是小写字母或”?”。字符之间没有多余空格。

    输出

    一行一个数表示答案。
     
     
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    char mp[10005];
    int n,ant;
    void work()
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;i+j<n&&i-j>=0;j++)
            {
                if(mp[i+j]==mp[i-j])
                    ant++;
                else if(mp[i+j]=='?'||mp[i-j]=='?')
                    ant++;
                else
                    break;
            }
            for(int j=0;i+j<n&&i-j-1>=0;j++)
            {
                if(mp[i+j]==mp[i-j-1])
                    ant++;
                else if(mp[i+j]=='?'||mp[i-j-1]=='?')
                    ant++;
                else
                    break;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        scanf("%s",mp);
        work();
        printf("%d
    ",ant);
        return 0;
    }
  • 相关阅读:
    android:background背景图片被拉伸问题
    面试积累(String和StringBuffer, StringBuilder的理解)
    面试积累(冒泡排序和选择排序)
    面试积累(java的内存分析)
    面试积累(java配置环境变量)
    异常积累(SQLException)
    【linux】fdisk磁盘分区
    【走马观花】十一月十八日通州雨
    【linux】CentOS查看硬件信息
    【linux】go安装及配置
  • 原文地址:https://www.cnblogs.com/Diliiiii/p/10267416.html
Copyright © 2011-2022 走看看