美团技术工程师笔试第一题,用例答案相同,但未通过,求解答

题目是:输入一个长度为n的字符串s,求s中有多少个长度大于1的子串是镜像的,比如AHA,HH,AA等等,字符串中只有大写字母,下面是我的代码:
import sys

def count_mirror_substring(s):
    n = len(s)
    count = 0

    for i in range(n):
        for j in range(i + 1, n):
            substring = s[i : j + 1]
            if substring == substring[:: -1]:
                count = count + 1

    return count

input_string = sys.stdin.readline().strip()
result = count_mirror_substring(input_string)
print(result)

输出结果和用例给出的是一样的,但是用例没通过,想不明白是什么原因。
全部评论
没认真读题吧,不是所有字母都是能景象的,ABA,这个答案应该是0
2 回复 分享
发布于 03-22 21:02 江苏
单字母
2 回复 分享
发布于 03-22 21:05 湖北
单个字母也得是轴对称的才行
1 回复 分享
发布于 03-22 21:01 湖北
题目中定义 镜像字符串 除了回文字符也是镜像的,比如BB就不是镜像字符串。
1 回复 分享
发布于 03-22 21:01 浙江
好像还要求了子串里每个字母也是对称的
1 回复 分享
发布于 03-22 21:02 上海
Scanner sc = new Scanner(System.in); String str = sc.nextLine(); if (str.length() <= 1 || str.length() > 100) { System.out.println(0); } else { int count = 0; for (int i = 0; i < str.length(); i++) { for (int j = i; j < str.length(); j++) { // 判断两个端点 再判断区间是否为回文 且 每个字母都属于 list if (isCC(str.charAt(i)) && str.charAt(i) == str.charAt(j)) { if (j - i >= 1) { for (int k = i, l = j; k <= l; k++, l--) { if (str.charAt(k) == str.charAt(l) && isCC(str.charAt(k))&& isCC(str.charAt(l))) { if (k == l) { count++; } else if (k + 1 == l) { count++; } } } } } } } System.out.println(count); } } private static boolean isCC(char c) { char[] cc = new char[]{'A','H','I','M','O','T','U','V','W','X','Y'}; for (int i = 0; i < cc.length; i++) { if (cc[i] == c) { return true; } } return false; } 我这个也是一个用例都无法通过,但是自测可以,懵了
点赞 回复 分享
发布于 03-22 21:05 浙江
懂了,懂了,大意了
点赞 回复 分享
发布于 03-22 21:14 河北

相关推荐

头像 会员标识
03-22 20:53
投递美团等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务