快速人名查找

题目描述:https://pycoder.blog.csdn.net/article/details/125703694

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *name_word[10] = {0};
char dstName[10] = {0};


int dfs(int word_len, int word_index, int dstNameLen, int dstNameIndex)
{
    int ret;
    
    if ((dstNameIndex == dstNameLen) || (word_index == word_len)) {
        if ((dstNameIndex == dstNameLen) && (word_index == word_len)) {
            return 1;
        } else {
            return 0;
        }
    }

        
    for (int i = 0 ; i < strlen(name_word[word_index]); i++) {
        if (name_word[word_index][i] == dstName[dstNameIndex]) {
            word_index++;
            dstNameIndex++;
            ret = dfs(word_len, word_index, dstNameLen, dstNameIndex);
            if (ret != 0) return ret;
            word_index--;
        } else {
            break;
        }
    }
    
    return 0;
}

int main(void)
{
    char str[1000] = {0};
    char *name[100] = {0};
    char *tmp;
    char name_tmp[100] = {0};
    int index = 1;
    int word_index;
    int dst_index = 0;
    int dst_len;
    char res_name[10][50] = {0};
    int res_index = 0;
    
    gets(str);
    scanf("%s", dstName);
    
    dst_len = strlen(dstName);
    
    name[0] = strtok(str, ",");
    while (1) {
        tmp = strtok(NULL, ",");
        if (tmp == NULL) break; 
        name[index++] = tmp;
    }
    
    for (int i = 0; i < index; i++) {
        strcpy(name_tmp, name[i]);
        word_index = 1;
        name_word[0] = strtok(name[i], " ");
        while (1) {
            tmp = strtok(NULL, " ");
            if (tmp == NULL) break; 
            name_word[word_index++] = tmp;
        }
        
        if (dfs(word_index, 0, dst_len, 0)) {
            strcpy(res_name[res_index++], name_tmp);
        }
    }
    
    for (int i = 0; i < res_index - 1; i++) {
        printf("%s,", res_name[i]);
    }
    printf("%s\n", res_name[res_index - 1]);
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为od机试快速人名查找是指在华为OD系统中,能够快速查找到特定人名的功能。 在现实生活中,我们经常需要查找某个人的信息,比如电话号码、邮箱地址等。而在庞大的华为OD系统中,有成千上万的员工和合作伙伴,怎样快速地找到特定的人名是非常重要的。因此,华为OD机试中提出了这个问题,是为了考察面试者对于算法和数据结构的理解和应用。 要实现快速人名查找,可以使用一些常见的数据结构和算法,比如哈希表、二叉搜索树、散列表等。其中,哈希表是一种非常高效的数据结构,可以实现快速查找和插入操作。通过将人名计算为一个哈希值,并将其与一个固定大小的哈希表关联起来,就可以实现快速人名查找。 此外,还可以考虑使用二叉搜索树。通过将所有的人名按照字母顺序进行排序,并构建一颗二叉搜索树,就可以通过二分搜索的方式快速地找到特定人名。 另外,还可以使用散列表。通过将人名映射为散列值,并将其存储在散列表中,可以实现快速人名查找。在散列表中,人名与散列值之间建立一种映射关系,可以通过散列值快速定位到对应的人名。 综上所述,华为OD机试快速人名查找旨在考察面试者对于算法和数据结构的应用能力以及问题解决思路的拓展。只有能够熟练地掌握常见的数据结构和算法,并灵活运用于实际问题中,才能够在工作中高效地处理各种业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值