在本题中,所有的测试点都满足在字母表中第一个只出现一次的字符,而无法满足在字符串中第一个仅出现一次的字符的代码可AC

#include <bits/stdc++.h>
using namespace std;
int main()
{
	char alpha[26],judge[26]={0,0,0,0,0 ,0,0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};
	string str;
	getline (cin,str);
	for (int i=0;i<26;i++)
	{
		alpha [i]='a'+i; 
		
	}
	for (int i = 0;i<str.length();i++)
	{
		for (int j = 0; j< 26;j++)
		{
			if (str[i]==alpha[j])
			{
				judge[j]++;
				break; 
			}
		}
	}
	for (int i=0;i<26;i++)
	{
		if(judge[i]==1)
		{
			cout<<alpha[i];
			return 0;//仅能按照字母表查找满足条件的字母
		}
	}cout <<"no";
	return 0;
	 	
	
}

在单词 "pomelo" 中,让我们找出第一个仅出现一次的字母:

分析 "pomelo":

p → 出现1次

o → 出现2次

m → 出现1次

e → 出现1次

l → 出现1次

按字符串顺序查找:

'p' → 出现1次 ✓(这就是第一个仅出现一次的字母)

'o' → 出现2次 ✗

'm' → 出现1次 ✓(但不是第一个)

'e' → 出现1次 ✓

'l' → 出现1次 ✓

'o' → 出现2次 ✗

答案:p

所以对于 "pomelo",第一个仅出现一次的字母是 p'p'。 原始代码会返回 'e'(按字母表顺序:e, l, m, p 都只出现一次,但字母表顺序中 'e' 最小),这是错误的,因为题目要求的是按字符串中的出现顺序,但测试点中没有类似的点

2 comments

  • 1

Information

ID
608
Time
1000ms
Memory
256MiB
Difficulty
5
Tags
(None)
# Submissions
188
Accepted
67
Uploaded By