《剑指Offer》-50-第一个只出现一次的字符

返回“第一个”,怎么才能说是第一个?
首先要确定它只出现一次,其次还得是第一个满足以上条件的
哦,只包含小写字母是吧,那容易啊

至少需要一次遍历才能确定一个字母是不是只出现了一次,那有没有可能在这次遍历中就保存下来第一个呢

我一下子竟然想不出来怎么做
确切地说是自动屏蔽了那些看起来时间、空间不够好的方法

书上有一点我很疑惑,它想用数组下标映射替代哈希,然后说ASCII只有256位所以数组长度就这么决定,没问题但是…中文字符不也可以是char吗?那肯定不是256个数组就可以表示得完得了

中文的ASCII是是个什么东西?所以可以说书上的题解不严谨吗

结果还是要两次遍历,只是优化了空间复杂度

	char firstUniqChar(string s) {
		char first = ' ';
		vector<int> ascii(26);
		for (char ch : s) {
			ascii[ch - 97]++;
		}
		for (char ch : s) {
			if (ascii[ch - 97] - 1 == 0) {
				first = ch;
				break;
			}
		}
		return first;
	}
posted @ 2023-02-08 17:50  YaosGHC  阅读(27)  评论(0)    收藏  举报