1 条题解

  • 0
    @ 2025-8-24 21:18:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 览遍千秋
    将伤与泪汇成力化作拳

    搬运于2025-08-24 21:18:41,当前版本为作者最后更新于2025-05-21 22:39:56,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source and Knowledge

    2025 年 5 月语言月赛,由洛谷网校提供。

    简易字符串


    文字题解

    基础知识

    【回文串判断】

    对于字符串 ss,如何判断字符串 ss 是否是回文串?

    可以使用两个指针 l,rl,r,分别从串头和串尾相向移动,如果所有的 sl,srs_l,s_r 都匹配,那么 ss 是回文串。

    bool ispalindrome = true;
    for(int l = 0, r = (int)s.size() - 1; l <= r; l++, r--) {
        if(s[l] != s[r]) {
            ispalindrome = false;
        }
    }
    

    【子串提取】

    string 类型提供了丰富的成员函数帮助我们完成字符串操作。其中,substr 成员函数可以用于提取子串。

    substr 成员函数接受两个参数,第一个参数为起始提取的下标,第二个参数为提取的子串长度。如果提取的子串长度长于剩余的串长,则提取到字符串尾截止

    提取字符串 ss 下标 [l,r][l,r] 的子串,可以用以下代码完成。

    string t = s.substr(l, r - l + 1);
    

    通配回文

    回到本题,首先,我们需要枚举所有的子串。这可以通过枚举子串的范围 l,rl,r 完成,同时通过上文的 substr 函数提取子串。

    子串提取后,需要判断其是否为回文串。本题引入了通配符 ?,但只需要在上文回文串判断代码中,修改匹配的判定逻辑即可。

        if(s[l] != s[r] && s[l] != '?' && s[r] != '?') {
            ispalindrome = false;
        }
    
    • 1

    信息

    ID
    12300
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者