美团技术工程师笔试第一题,用例答案相同,但未通过,求解答
题目是:输入一个长度为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)
输出结果和用例给出的是一样的,但是用例没通过,想不明白是什么原因。
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
单字母
单个字母也得是轴对称的才行
题目中定义 镜像字符串 除了回文字符也是镜像的,比如BB就不是镜像字符串。
好像还要求了子串里每个字母也是对称的
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;
}
我这个也是一个用例都无法通过,但是自测可以,懵了
懂了,懂了,大意了
相关推荐

点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享