1436. 旅行终点站
1370. 上升下降字符串
1460. 通过翻转子数组使两个数组相等
2068. 检查两个字符串是否几乎相等
1935. 可以输入的最大单词数
1002. 查找共用字符 无题解
1207. 独一无二的出现次数
题解
1436. 旅行终点站
char * destCity(char *** paths, int pathsSize, int* pathsColSize){ char *hash[100],hashsize = 0,hashnum[100] = {0}; for(int i = 0;i<pathsSize;i++){//插入hash表以及对应的hashnum int j = 0; for(j = 0;j < hashsize;j++) if(strcmp(hash[j],paths[i][1]) == 0) break; if(j == hashsize) hashnum[hashsize] ++,hash[hashsize++] = paths[i][1]; else hashnum[j]++; } for(int i = 0;i<pathsSize;i++){//如果出现在起始就标记为0 for(int j = 0;j < hashsize;j++) if(strcmp(hash[j],paths[i][0]) == 0) hashnum[j] = 0; } for(int j = 0;j < hashsize;j++)//找到入度为1的点就好了 if(hashnum[j] == 1) return hash[j]; return 0; }
1370. 上升下降字符串 大水题
char * sortString(char * s){ int hashnum[26] = {0},len = 0,anssize = 0; char *ans = malloc(sizeof(char)*510); for(int i = 0;s[i];i++){ //初始化hash表 len++; hashnum[s[i]-'a']++; } while(len){ for(int i = 0;i<26;i++) if(hashnum[i]) ans[anssize++] = i+'a',hashnum[i]--,len--; for(int i = 25;i>=0;i--) if(hashnum[i]) ans[anssize++] = i+'a',hashnum[i]--,len--; } ans[anssize++] = 0; return ans; }
1460. 通过翻转子数组使两个数组相等
bool canBeEqual(int* target, int targetSize, int* arr, int arrSize){ if(targetSize != arrSize) return false; int hash[1001] = {0}; for(int i = 0;i<targetSize;i++) hash[target[i]]++; for(int i = 0;i<arrSize;i++) if(hash[arr[i]]) hash[arr[i]]--; else return false; return true; }
2068. 检查两个字符串是否几乎相等
bool checkAlmostEquivalent(char * word1, char * word2){ char hash[26] = {0}; for(int i = 0;word1[i];i++) hash[word1[i]-'a']++; for(int i = 0;word2[i];i++) hash[word2[i]-'a']--; for(int i = 0;i<26;i++) if(hash[i]>3||hash[i]<-3) return false; return true; }
1935. 可以输入的最大单词数
int canBeTypedWords(char * text, char * brokenLetters){ bool hash[26]; int ans = 0; memset(hash,0,sizeof(hash)); for(int i = 0;brokenLetters[i];i++) //标记坏键盘 hash[brokenLetters[i]-'a'] = 1; for(int i = 0;text[i];i++){ int flag = 1; while(text[i]&&text[i]!=' ') if(hash[text[i++]-'a']) flag = 0; if(flag) ans++; if(!text[i]) i--; } return ans; }
1207. 独一无二的出现次数
bool uniqueOccurrences(int* arr, int arrSize){ int hash[2001] = {0}; bool hashnum[1001]; memset(hashnum,0,sizeof(hashnum)); for(int i = 0;i < arrSize;i++) hash[arr[i]+1000]++; for(int i = 0;i <2001;i++) if(hash[i]) if(!hashnum[hash[i]]) hashnum[hash[i]] = 1; else return false; return true; }