CF1144A Diverse Strings 题解

Content

我们定义一个字符串是合法的,当且仅当这个字符串是“连续排列”(按照字母表顺序排序)。现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\),判断它们是否合法。

数据范围:\(1\leqslant n\leqslant 100,|s_i|\leqslant 100\)\(s_i\) 仅由小写英文字母组成。

Solution

这道题目关键的一点就在于:给字符串排序。我在 CF975A的题解 中曾详细讲过如何用 \(\texttt{sort}\) 直接给字符串按照字典序排序,利用 string 中的 begin() 和 end() 函数即可。

排完序之后,我们再直接遍历,看当前字符在字母表中的位置是否是前一个字符在字母表中的位置的后面一位,一旦找到不符合这个条件的字符,我们就判定它是不合法的。扫完之后如果全部符合情况,说明它是合法的。

Code

int n;

int main() {
	getint(n);
	while(n--) {
		string s;
		cin >> s;
		sort(s.begin(), s.end());
		int len = s.size(), flag = 1;
		_for(i, 1, len - 1)
			if(s[i] - s[i - 1] != 1) {
				puts("No");
				flag = 0;
				break;
			}
		if(flag)	puts("Yes");
	}
	return 0;
}
posted @ 2021-12-17 14:19  Eason_AC  阅读(48)  评论(0)    收藏  举报