B - HRZ 学英语

题意介绍

给定一个由大写的26个英文字母以及’?‘组成的字符串,求第一个由连续的26个字母组成的字符串,其中要求每个字母只能出现一次,并且’?'可以代表任意一个字母。

题意分析

从字符串的第一位开始,每次截取26个字符组成一个字符串,遍历该字符串,如果有一个字符出现不止一次,就停止遍历,否则,遍历完之后将’?'的位置填上一个没有出现过的字符即可。

通过代码

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int arr[26] = { 0 };
bool flag;
string str, s;

int main()
{
	
	cin >> str;
	for (int i = 0; i < str.size() - 25; i++)
	{
		for (int j = 0; j < 26; j++)
			arr[j] = 0;

		flag = false;
		s = str.substr(i, 26);
		for (int j = 0; j < 26; j++)
		{
			if (s[j] - 'A' >= 0 && s[j] - 'A' < 26)
				arr[s[j] - 'A']++;
			if (arr[s[j] - 'A'] >= 2) flag = true;
		}
		if (flag) continue;
		for (int i = 0; i < 26; i++)
		{
			if (arr[i] == 0)
			{
				int c = s.find('?');
				s[c] = (char)(i + 'A');
			}
		}
		cout << s;
		return 0;
	}
	cout << "-1" << endl;
	return 0;
}

发布了40 篇原创文章 · 获赞 0 · 访问量 1057

猜你喜欢

转载自blog.csdn.net/weixin_44934885/article/details/105488110