题目:给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t ,并返回该子串的长度。
思路:使用hash表的优点在于,使用数组存储正在找的字符,用两个数组就很方便。统计个数也好,还是替代也好。其实看到这个题目,就知道有三种情况,第一种,表中只有两种字符以下的情况,只需要把新来的加入表中,或者把已存在的加入表中。第二种,表中有两个字符,但是新来的是这两个字符中的一个,此时只需要加个数。第三种,也是最复杂的,就是已经有两个了,但是新来的字符不同,因此,需要消掉第一个字符,第一个字符是哪个,有几个,怎么消除。就是这个题目的难点。
#define HASHNUM 128 //Z ASCII码值为127
int CheckHashNum(const int *hashArry)
{
int valueNum = 0;
if (hashArry == NULL) {
return false;
}
for (int i = 0; i < HASHNUM; i++) {
if (hashArry[i] != 0) {
valueNum++;
}
}
return valueNum;
}
int Max(const int Num1, const int Num2)
{
if (Num1 >= Num2) {
return Num1;
} else {
retu