华为OD机试真题(Java),计算最大乘积(100%通过+复盘思路)

在这里插入图片描述

一、题目描述

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

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

二、输入描述

输入为一个半角逗号分隔的小写字符串的数组,2 <= 数组长度<=100,0 < 字符串长度<= 50。

三、输出描述

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

四、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String[] arr = sc.nextLine().split(",");
    int max = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            if (!check(arr[i], arr[j])) {
                max = Math.max(max, arr[i].length() * arr[j].length());
            }
        }
    }
    System.out.println(max);
}

private static boolean check(String a, String b) {
    char[] arr1 = a.toCharArray();
    char[] arr2 = b.toCharArray();
    Arrays.sort(arr1);
    Arrays.sort(arr2);
    int i = 0;
    int j = 0;
    while (i < a.length() && j < b.length()) {
        if (arr1[i] == arr2[j]) {
            return true;
        } else if (arr1[i] > arr2[j]) {
            j++;
        } else if (arr1[i] < arr2[j]) {
            i++;
        }
    }
    return false;
}

五、效果展示

输入

qwerty,asd,qwesd,eraffa,qzxca

输出

18

说明

数组中有5个元素。

qwerty与asd无相同的字符,满足条件,qwerty的长度为6,asd的长度为3,乘积为18。

qwerty与qwesd、eraffa、qzxca均有相同的字符,不满足条件。

asd与qwesd、eraffa、qzxca均有相同的字符,不满足条件。

qwesd与eraffa,qzxca有相同的字符,不满足条件。

eraffa与qzxca有相同的字符,不满足条件。

因此,输出为18。

华为OD机试真题(Java),计算最大乘积(100%通过+复盘思路)_第1张图片

本文收录于,华为OD机试2023(Java)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

你可能感兴趣的:(java,算法,华为机试)