作者:小迅
链接:https://leetcode.cn/problems/number-of-different-integers-in-a-string/solutions/2008487/ha-xi-zhu-shi-chao-ji-xiang-xi-by-xun-ge-vwnr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
题目要求在字符串中寻找不同数值的个数
那么就涉及一个重复数值的问题,对于去重使用哈希表无疑是比较方便的选择
我们使用双指针枚举字符串中的所有元素,记录每一个数值的左右边界,并去其前导零,之后判断是否在哈希表中存在,不存在则入哈希表,最后返回哈希表中元素个数即为有效数值个数
代码
/* 字符串uthash结构体 */
typedef struct {
char num[1001];
UT_hash_handle hh;
} NumHash;
NumHash *g_head = NULL;
/* 字符串加入到hash表中 */
void add(char *num) {
NumHash *s = NULL;
HASH_FIND_STR(g_head, num, s);
if (s == NULL) {
s = malloc(sizeof(NumHash));
strcpy(s->num, num);
HASH_ADD_STR(g_head, num, s);
}
}
int numDifferentIntegers(char * word){
int len = strlen(word);
int i, j;
char num[1001];
g_head = NULL;
while (i < len) {
if (isdigit(word[i])) {
j = i;
while (j + 1 < len && isdigit(word[j + 1])) { /* 找到数字的子串 */
j++;
}
while (word[i] == '0' && i < j) { /* 去除前导0 */
i++;
}
strncpy(num, word + i, j - i + 1); /* 添加到hash表中 */
num[j - i + 1] = '\0';
i = j;
add(num);
}
i++;
}
return HASH_COUNT(g_head); /* 返回hash中元素个数 */
}
作者:小迅
链接:https://leetcode.cn/problems/number-of-different-integers-in-a-string/solutions/2008487/ha-xi-zhu-shi-chao-ji-xiang-xi-by-xun-ge-vwnr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。