codeforces 957 A. Tritonic Iridescence

本文介绍了一种判断字符串是否能够通过替换问号形成至少两种不同合法组合的方法。具体包括检查字符串两端是否有问号、是否存在连续两个及以上问号、以及一个问号两端字母是否相同等情况。

题意:

给出一个字符串,要求任意两个相同的字母不能相同,问这个字符串是否能有两种或者两种以上的表现形式。

思路:

简单判断一下:

1.问号在端点;

2.连续两个问号或者以上;

3.一个问号两端的字母是相同的。

不过坑点就是给出的字符串没有问号或者给出的字符串本身就是不满足条件的。

代码:

 1 #include <stdio.h>
 2 #include <string>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     string s;
 9     
10     int n;
11     
12     cin >> n;
13     
14     cin >> s;
15     
16     int sz = s.size();
17     
18     bool f = 0;
19     
20     int cnt = 0;
21     
22     for (int i = 0;i < n;i++)
23     {
24         if (s[i] == '?') cnt++;
25         
26         if (i > 0 && s[i] == s[i-1] && s[i] != '?')
27         {
28             f = 1;
29             break;
30         }
31     }
32     
33     if (f || cnt == 0)
34     {
35         printf("no\n");
36         
37         return 0;
38     }
39     
40     bool ff = 0;
41     
42     for (int i = 0;i < n;i++)
43     {
44         if (i == 0 && s[i] == '?') ff = 1;
45         if (i == n - 1 && s[i] == '?') ff = 1;
46         if (i > 0 && s[i] == '?' && s[i+1] == s[i-1] && s[i+1] != '?') ff = 1;
47         if (i > 0 && s[i] == '?' && s[i] == s[i-1]) ff = 1;
48     }
49     
50     if (ff) printf("yes");
51     else puts("no");
52     
53     return 0;
54 }

 

转载于:https://www.cnblogs.com/kickit/p/8809591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值