题目描述:
题目解读:
给定一个字符串s,s字符串仅由^和_组成,在任意位置插入^和_,使得这个字符串所有字符都能顺利组成^^或^_^,给出最少操作次数。
解题思路:
单纯判断‘_’和‘^’的个数,不确定位序则无法确定是否需要插入;
判断什么情况下需要添加字符:
对于‘^’:只有遇见单个^,此时需要+1个^。(因为如果后续有^,则不需要加;如果遇到_,则是要判断_的后续有没有^,这里就和^无关了。)
对于‘_’:我们需要检测两侧是否有‘^’,没有就需要加入‘^’,但是遇到连续的_,加两边显然不对,所以只能判断‘_’的一侧是否有‘^’,没有就需要+1。(此时存在特殊情况:若首字符就是‘_’,需要额外多加一次。)
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<iostream>
using namespace std;
void Solve() {
string s;
int i = 0;
int flag = 0;
cin >> s;
if (s.length() == 1 && s[0] == '^') { //遇见单字符^,直接输出1
printf("1\n");
return;
}
if (s[0] == '_') flag++; //遇见首字符是_,计数先加一次
for (i = 0; i < s.length(); i++) {
if (s[i] == '_'&& s[i + 1] != '^') flag++; //如果遇到_,且下位字符不是^,计数+1
}
printf("%d\n", flag);
return;
}
int main() {
int t;
scanf("%d", &t);
while (t--) Solve();
return 0;
}
遇到的错误: