第一次写题解!
题意:
给定字符串 $s$,由 ```a```,```b```,```c```,```?``` 四种字符构成。
您需要将 $s$ 中的所有 ```?``` 修改为 ```a```,```b```,```c``` 中的一种,使得 $s$ 相邻两个字符均不相同。
思路:
如果这个字符串的第 $i$ 位不是 ```?```,这能说明这字符串没有解,直接输出 $-1$;反之在 ```a```,```b```,``c`` 中任选一个,因为 第 $i$ 位 与第 $i+1$ 位字符串最多有 $2$ 个不同字符,定有解。
最后扫描一下字符串,按以上思路判断一下字符串是否有解,即可。
代码:
```
int n;
scanf("%d", &n);
while (n--) {
int flag = 1; //这个是用来标记这个字母(a-c)中的其中一个字母是否想相邻
scanf("%s", s + 1);//细节
int l = strlen(s + 1);//l就相当于字符串的长度
for (int i = 1; i <= l; i++) {
if (s[i] != '?' && s[i + 1] == s[i]) {
flag = 0;
break;
}
}
if (!flag)//如果没有符合要求的字符串
printf("-1\n");
else {
for (int i = 1; i <= l; i++) {
if (s[i] != '?') {
printf("%c", s[i]);
} else {
int pos1 = i;
int pos2 = 0;
for (i = i; i <= l; i++) {
if (s[i + 1] != '?') {
pos2 = i;
break;
}
}
solve(pos1, pos2);
}
}
printf("\n");
}
}
return 0;
}
```