1002. 查找共用字符 无题解
题解
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;
}
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;
}
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;
}
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;
}
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;
}