这题在比赛的时候WA到写不出来,也有判断ABC子串不一样不过写的很差一直WA
在整理清思路后重写一遍3Y
解题思路如下:
第一种情况:ABABA。 先判断开头的A与结尾的A,得到A的长度,
接着判断ABAB 中的AB与AB是否相同(ABAB的长度一定为偶数)
已经知道了A长度,AB的长度 接着判断下A 与B是否相同
第二种情况:ABABCAB-可先讲AB看成整体即DDCD
若存在一个D满足条件 可得到C的长度和位置再判断A-B是否相同A-C是否相同 B-C是否相同(暴力取A的长度咯)
其中在重写的时候WA的一个原因是这样的:
暴力A子串的长度的时候
for(int lena = 1; lena <= len / 3; ++lena){
这么写会导致WA
如果控制到位,这么写:
for(int lena = 1; lena <= (len - 2) / 3; ++lena){
就不会出现错误。
取D子串的时候也是同理。
看了别人写的代码,漫天飞舞的flag_1,flag_2,flag_3
还不如自己写一遍舒服多了
#include <stdio.h> #include <string.h> int main(){ int n, i, j, k, t, m; char array[55], a[55]; int len; bool flag_a, flag_b; scanf("%d",&t); while(t--){ scanf("%s",array); len = 0; flag_a = flag_b = false; for(i = 0; i < strlen(array); ++i){ if(array[i] >= 'A' && array[i] <= 'Z' || array[i] >= 'a' && array[i] <= 'z'){ a[len++] = array[i]; } } a[len] = '