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

news/2024/11/13 13:54:42/

在这里插入图片描述

华为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算法源码

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_productif __name__ == "__main__":import sysinput_str = sys.stdin.readline()print(max_product_no_common_chars(input_str))

七、JavaScript算法源码

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.ppmy.cn/news/1546027.html

相关文章

在 hiveSQL 中判断一个字段是否包含某个值

在 hiveSQL 中判断一个字段是否包含某个值是在写sql时经常遇到的问题&#xff0c;本文将通过下述案例用五种方法进行解决 数据准备&#xff1a; 题目&#xff1a;查找姓名中含有”i“的员工信息 CREATE TABLE employee (name STRING,age INT );INSERT INTO employee VALUES(…

Java基础——类和对象的定义链表的创建,输出

目录 什么是类&#xff1f; 什么是对象? 如何创建链表&#xff1f; 尾插法&#xff1a; 头插法&#xff1a; 输出链表的长度 输出链表的值 什么是类&#xff1f; 创建Java程序必须创建一个类class. .java程序需要经过javac指令将文件翻译为.class字节码文件&#xff0c…

高效集成:聚水潭采购数据同步到MySQL

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将聚焦于如何通过轻易云数据集成平台&#xff0c;将聚水潭系统中的采购入库单数据高效、准确地集成到MySQL数据库中。具体方案名称为“聚水潭-采购入库单-->BI阿尼三-采购入库表_copy”。 首先&#…

Git别名设置

在 Git 中设置命令别名可以让你更高效地使用常见的 Git 命令。通过为常用命令创建简短的别名&#xff0c;可以减少输入的字符数并加速工作流程。 参考链接 设置 Git 命令别名的方法&#xff1a; 使用 Git 配置命令&#xff1a; Git 允许通过 git config 命令来设置命令别名。这…

面向对象的需求分析和设计(一)

[toc] 1. 引言 前一篇文章《我对需求分析的理解》提到了面向对象分析和设计&#xff0c;正好最近又重新有重点的读了谭云杰著的《Think in UML》&#xff0c;感觉有必要写把书中一些核心内容观点以及自己的想法整理出来&#xff0c;一是方便自己日后的复习&#xff0c;另外也…

架构师备考-架构基本概念

目录 基本概念 架构设计与生命周期 需求分析 设计阶段 实现阶段 构件组装阶段 部署阶段 后开发阶段 动态软件体系结构 体系结构恢复与重建 软件架构设计的重要性 基本概念 软件架构&#xff08;Software Architecture&#xff09;设计主要关注软件构件的结构、属性和…

w030基于web的甘肃非物质文化网站的设计与开发

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

Kafka 之顺序消息

前言&#xff1a; 在分布式消息系统中&#xff0c;消息的顺序性是一个重要的问题&#xff0c;也是一个常见的业务场景&#xff0c;那 Kafka 作为一个高性能的分布式消息中间件&#xff0c;又是如何实现顺序消息的呢&#xff1f;本篇我们将对 Kafka 的顺序消息展开讨论。 Kafk…