华为OD机试 - 无重复字符的元素长度乘积的最大值(Python/JS/C/C++ 2024 C卷 100分)

news2024/11/26 2:36:26

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

一、题目描述

给定一个元素类型为小写字符串的数组,请计算两个没有相同字符的元素长度乘积的最大值。

如果没有符合条件的两个元素返回0。

二、输入描述

输入为一个半角逗号分割的小写字符串数组

2<= 数组长度 <=100

0< 字符串长度 <=50

三、输出描述

两个没有相同字符的元素长度乘积的最大值。

四、测试用例

测试用例1

1、输入

iwdvpbn,hk,iuop,iikd,kadgpf

2、输出

14

3、说明

数组中有5个元素。
iwdvpbn与hk无相同的字符,满足条件,iwdvpbn的长度为7,hk的长度为2,乘积为14(7*2)。
iwdvpbn与iuop、iikd、kadgpf均有相同的字符,不满足条件。
iuop与iikd、kadgpf均有相同的字符,不满足条件。

测试用例2

1、输入

abc,def,gh

2、输出

9

3、说明

所有字符串两两之间都没有相同字符,最长的两个是abc和def,乘积为3*3=9。

五、解题思路

遍历每个字符,与其余的字符串进行比较,如果没有相同字符,则计算乘积。

获取乘积最大值即可。

需要在给定的字符串数组中找到两个字符串,它们之间没有任何共同的字符,并且它们长度的乘积最大。如果不存在这样的两个字符串,返回0。

六、Python算法源码

def max_product_no_common_chars(input_str):
    # 分割输入字符串为列表
    arr = input_str.strip().split(',')
    n = len(arr)
    masks = [0] * n  # 存储每个字符串的字符集掩码
    lengths = [0] * n  # 存储每个字符串的长度
    for i in range(n):
        s = arr[i]
        lengths[i] = len(s)
        for c in s:
            masks[i] |= 1 << (ord(c) - ord('a'))  # 设置对应字符的位
    max_product = 0
    # 双重循环比较每对字符串
    for i in range(n - 1):
        for j in range(i + 1, n):
            if (masks[i] & masks[j]) == 0:  # 无共同字符
                max_product = max(max_product, lengths[i] * lengths[j])
    return max_product

if __name__ == "__main__":
    import sys
    input_str = sys.stdin.readline()
    print(max_product_no_common_chars(input_str))

七、JavaScript算法源码

function maxProductNoCommonChars(inputStr) {
    // 分割输入字符串为数组
    const arr = inputStr.trim().split(',');
    const n = arr.length;
    const masks = new Array(n).fill(0); // 存储每个字符串的字符集掩码
    const lengths = new Array(n).fill(0); // 存储每个字符串的长度
    for (let i = 0; i < n; i++) {
        const s = arr[i];
        lengths[i] = s.length;
        for (let c of s) {
            masks[i] |= 1 << (c.charCodeAt(0) - 'a'.charCodeAt(0)); // 设置对应字符的位
        }
    }
    let maxProduct = 0;
    // 双重循环比较每对字符串
    for (let i = 0; i < n - 1; i++) {
        for (let j = i + 1; j < n; j++) {
            if ( (masks[i] & masks[j]) === 0 ) { // 无共同字符
                maxProduct = Math.max(maxProduct, lengths[i] * lengths[j]);
            }
        }
    }
    return maxProduct;
}

// 读取标准输入并输出结果
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', (input) => {
    console.log(maxProductNoCommonChars(input));
    rl.close();
});

八、C算法源码

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

int main() {
    char input[10000];
    // 读取输入字符串
    fgets(input, sizeof(input), stdin);
    // 去除换行符
    input[strcspn(input, "\n")] = '\0';
    // 分割字符串
    char *arr[100];
    int n = 0;
    char *token = strtok(input, ",");
    while (token != NULL && n < 100) {
        arr[n++] = token;
        token = strtok(NULL, ",");
    }
    int masks[100] = {0}; // 存储每个字符串的字符集掩码
    int lengths[100] = {0}; // 存储每个字符串的长度
    for (int i = 0; i < n; i++) {
        char *s = arr[i];
        lengths[i] = strlen(s);
        for (int j = 0; j < lengths[i]; j++) {
            masks[i] |= 1 << (s[j] - 'a'); // 设置对应字符的位
        }
    }
    int max_product = 0;
    // 双重循环比较每对字符串
    for (int i = 0; i < n -1; i++) {
        for (int j = i +1; j < n; j++) {
            if ( (masks[i] & masks[j]) == 0 ) { // 无共同字符
                int product = lengths[i] * lengths[j];
                if (product > max_product) {
                    max_product = product;
                }
            }
        }
    }
    printf("%d\n", max_product);
    return 0;
}

九、C++算法源码

#include <bits/stdc++.h>
using namespace std;

int main(){
    string input;
    // 读取输入字符串
    getline(cin, input);
    // 分割字符串
    vector<string> arr;
    string token;
    stringstream ss(input);
    while(getline(ss, token, ',')){
        arr.push_back(token);
    }
    int n = arr.size();
    vector<int> masks(n, 0); // 存储每个字符串的字符集掩码
    vector<int> lengths(n, 0); // 存储每个字符串的长度
    for(int i=0;i<n;i++){
        string s = arr[i];
        lengths[i] = s.length();
        for(char c : s){
            masks[i] |= 1 << (c - 'a'); // 设置对应字符的位
        }
    }
    int max_product = 0;
    // 双重循环比较每对字符串
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if( (masks[i] & masks[j]) == 0 ){ // 无共同字符
                max_product = max(max_product, lengths[i] * lengths[j]);
            }
        }
    }
    cout << max_product << endl;
    return 0;
}


🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2234099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++之STL】一文学会使用 string

文章目录 1. STL导读1. 1 什么是STL1. 2 STL的版本1. 3 STL六大组件1. 4 STL的重要性1. 5 STL的学习1. 6 STL系列博客的规划 2. string2. 1 为什么学习string类?2. 2 标准库中的string2. 3 基本构造2. 4 尾插与输出运算符重载2. 5 构造函数2. 6 赋值运算符重载2. 7 容量操作2.…

【分布式】分布式锁设计与Redisson源码解析

分布式锁 分布式锁是一种在分布式计算环境中用于控制多个节点&#xff08;或多个进程&#xff09;对共享资源的访问的机制。在分布式系统中&#xff0c;多个节点可能需要协调对共享资源的访问&#xff0c;以防止数据的不一致性或冲突。分布式锁允许多个节点在竞争访问共享资源…

【实测有效】两个Ubuntu系统通过网线传输文件

基本思路是&#xff1a;连接网线后&#xff0c;通过设置静态IP&#xff0c;将两台电脑配置在同一个局域网内&#xff0c;再进行文件传输。 一、物理连接 使用网线将两台电脑的网口连接起来。 二、静态IP设置 两台电脑均需要对各自的静态IP进行设置。 1、查看电脑的IP地址 1&a…

Android camera2

一、序言 为了对阶段性的知识积累、方便以后调查问题&#xff0c;特做此文档&#xff01; 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…

【Redis_Day3】Redis通用命令

【Redis_Day3】Redis通用命令 redis客户端的三种形态redis的快与慢redis通用命令阅读redis官方文档redis中两个核心命令set命令get命令 redis全局命令keys命令&#xff1a;查询当前服务器上的key生产环境 exists命令&#xff1a;判定key是否存在del命令&#xff1a;删除指定的k…

静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构

1.1库的概念 库&#xff1a;程序代码的集合&#xff0c;编译好的二进制文件加上头文件供使用&#xff0c;共享程序代码的一种方式。 1.2库的分类 根据开源情况分为&#xff1a;开源库&#xff08;能看到具体实现&#xff09;、闭源库&#xff08;只公开调用的的接口&#xf…

小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统

前言 现在已经学习了很多与Java相关的知识&#xff0c;但是迟迟没有进行一个完整的实践&#xff08;之前这个项目开发到一半&#xff0c;很多东西没学搁置了&#xff0c;同时原先的项目中也有很多的问题&#xff09;&#xff0c;所以现在准备从零开始做一个基于SpringBootVue的…

【C++、数据结构】哈希表——散列表(一)(概念/总结)

「前言」 &#x1f308;个人主页&#xff1a; 代码探秘者 &#x1f308;C语言专栏&#xff1a;C语言 &#x1f308;C专栏&#xff1a; C / STL使用以及模拟实现 &#x1f308;数据结构专栏&#xff1a; 数据结构 / 十大排序算法 &#x1f308;Linux专栏&#xff1a; Linux系统编…

山东路远生态科技有限公司竣工投产仪式暨产品发布会圆满举行

第二十届三中全会于2024年7月15日至18日在北京举行。全会审议通过了《关于进一步全面深化改革、推进中国式现代化的决定》。其中提到,“要健全因地制宜发展新质生产力体制机制”。 新质生产力是由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生的当代先进生产力…

MD5(Crypto)

解题思路 打开文件发现一串代码&#xff0c;结合题目提示&#xff0c;应该是 MD5 加密。 找个在线的 MD5 解密网站&#xff0c;行云流水得到 flag。 题目设计原理 题目设计&#xff1a;无他&#xff0c;MD5 加密。 题目原理&#xff1a; MD5&#xff08;Message-Digest Algo…

EHOME视频平台EasyCVR萤石设备视频接入平台视频诊断技术可以识别哪些视频质量问题?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。萤石设备视频接入平台EasyCVR不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、GB35114、RTSP/Onvif…

QML项目实战:自定义Button

目录 一.添加模块 ​1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Button 1.颜色背景设置 2.设置渐变色背景 3.文本设置 4.点击设置 5.阴影设置 三.效果 1.当enabled为true 2.按钮被点击时 3.当enabled为false 四.代码 一.添加模块 1.QtQuick.Con…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者&#xff1a;擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时&#xff0c;通常会有一些去重的需求&#xff0c;这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据&#xff0c;但是在merge的时候会根据order …

labview学习总结

labview学习总结 安装labview的特点一、图形化编程范式二、并行执行机制三、硬件集成能力四、应用领域优势五、开发效率六、系统集成能力**labview基本组成示意图****常用程序结构图解**结语 基础知识介绍界面前后面板的概念平铺式和层叠式 帧的概念结构类型顺序结构for循环whi…

Linux 服务器使用指南:从入门到登录

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; &#x1f6a9;博主致力于用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 一…

《AI 大模型:重塑软件开发新未来》

引言 在科技的璀璨星河中&#xff0c;AI 大模型宛如一颗耀眼的新星&#xff0c;正以前所未有的力量改写着软件开发的篇章。随着其技术的持续演进&#xff0c;软件开发流程正经历着翻天覆地的变化。从代码自动生成的神奇魔法&#xff0c;到智能测试的精准洞察&#xff0c;AI 大…

acmessl.cn提供接口API方式申请免费ssl证书

目录 一、前沿 二、API接口文档 1、证书可申请列表 简要描述 请求URL 请求方式 返回参数说明 备注 2、证书申请 简要描述 请求URL 请求方式 业务参数 返回示例 返回参数说明 备注 3、证书查询 简要描述 请求URL 请求方式 业务参数 返回参数说明 备注 4、证…

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的&#xff0c;但专门设计用于服务器环境&#xff0c;而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…

Docker-- cgroups资源控制实战

上一篇&#xff1a;容器化和虚拟化 什么是cgroups&#xff1f; cgroups是Linux内核中的一项功能&#xff0c;最初由Google的工程师提出&#xff0c;后来被整合进Linux内核; 它允许用户将一系列系统任务及其子任务整合或分隔到按资源划分等级的不同组内&#xff0c;从而为系统…

解决ImportError: DLL load failed while importing _message: 找不到指定的程序。

C:\software\Anoconda\envs\yolov5_train\python.exe C:\Project\13_yolov5-master\train.py C:\software\Anoconda\envs\yolov5_train\lib\site-packages\torchvision\io\image.py:13: UserWarning: Failed to load image Python extension: [WinError 127] 找不到指定的程序…