[刷题计划]第二周第五天 | hash

简介: [刷题计划]第二周第五天 | hash

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;
}
相关文章
|
数据采集 分布式计算 搜索推荐
使用Python实现网页中图片的批量下载和水印添加保存
使用Python实现网页中图片的批量下载和水印添加保存
|
监控 Oracle Java
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,探索各大JVM虚拟机特色 —— JVM故障排除指南(先导篇)
《深入浅出Java虚拟机 — JVM原理与实战》带你攻克技术盲区,探索各大JVM虚拟机特色 —— JVM故障排除指南(先导篇)
228 0
|
10月前
Next.js 实战 (二):搭建 Layouts 基础排版布局
本文介绍了作者在Next.js v15.x版本发布后,对一个旧项目的重构过程。文章详细说明了项目开发规范配置、UI组件库选择(最终选择了Ant-Design)、以及使用Ant Design的Layout组件实现中后台布局的方法。文末展示了布局的初步效果,并提供了GitHub仓库链接供读者参考学习。
314 1
Next.js 实战 (二):搭建 Layouts 基础排版布局
|
11月前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
12月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
426 5
|
存储 负载均衡 监控
Linux-虚拟机迁移步骤
虚拟机迁移步骤
496 0
/etc/xinetd.d/telnet 配置信息说明
【5月更文挑战第27天】/etc/xinetd.d/telnet 配置信息说明
485 0
|
算法
阿里云图像搜索技术创新-工业五金图片搜索
阿里云图像搜索产品3月17日正式发布工业五金搜索模型,通过大规模算法模型训练,可在海量五金图片素材中快速定位到图片中五金件的同款或相似款商品原图,识别过程中可有效避免图片方位变化、光照变化、背景场景变化等情况对搜索结果的影响。以此帮助工业五金电商商城、仓库等快速找到同款、相似款。通过输入工业五金类图片,可以在海量商品库中找到同款、相似款配件,并返回对应的配件信息,提升五金类产品购物效率,帮忙更多工业五金制造和零售等企业轻松上云。
689 57
阿里云图像搜索技术创新-工业五金图片搜索
|
监控 druid Java
SpringBoot整合Druid和Mybatis
SpringBoot整合Druid和Mybatis
382 0