🌈 Scala 实现
题目描述:
- 给定一个元素类型为小写字符串的数组,请计算两个没有相同字符的元素长度乘积的最大值。如果没有符合条件的两个元素返回0。
输入描述:
- 输入为一个半角逗号分割的小写字符串数组
- 2<= 数组长度 <=100
- 0< 字符串长度 <=50
输出描述
- 两个没有相同字符的元素长度乘积的最大值
示例
输入:
- iwdvpbn,hk,iuop,iikd,kadgpf
输出:
- 14
说明
- 数组中有5个元组,iwdvpbn与hk无相同的字符,满足条件,iwdvpbn的长度为7,hk的长度为2,乘积为14(7*2)。 iwdvpbn与iuop、iikd、kadgpf均有相同的字符,不满足条件。 iuop与iikd、kadgpf均有相同的字符,不满足条件。
代码:
def main(args: Array[String]): Unit = {
// 获取输入
val elems = StdIn.readLine().split(",").toList
// 记录最大值
var max = 0
for (i <- 0 to elems.length - 2) {
val curr = elems(i).toCharArray
// 取出每个元素,并依次比较每一个字符
for (j <- i + 1 to elems.length - 2) {
val next = elems(j).toCharArray
breakable {
// 比较每一个元素,遇到相同的则跳出
for (elem <- curr) {
if (next.indexOf(elem) != -1)
break
}
// 修改最大值
max = Math.max(max, curr.length * next.length)
}
}
}
// 输出结果
println(max)
}
附 Python 实现:
import sys
import os
# 获取输入
input = str(sys.argv[1]).split(",")
print(input)
# 记录最大值
maxNum = 0
for i in range(len(input)-2):
# 先向字符中加入间隔符,然后根据字符切割为List
curr = ':'.join(input[i]).split(":")
# 取出每个元素,并依次比较每一个字符
for j in range(i+1,len(input)-2):
next = ':'.join(input[j]).split(":")
flag = bool(1)
for k in range(len(curr)-1):
# 比较每一个元素,遇到相同的则置flag为false
if curr[k] in next:
flag = bool(0)
# 修改最大值
if(flag):
maxNum = max(maxNum, len(curr) * len(next))
# 输出结果
print(maxNum)
附 Java 实现:
public static void main(String[] args) {
// 获取输入
String line = new Scanner(System.in).nextLine();
// 将输入内容按照指定字符切开
String[] strings = line.split(",");
// 记录最大值
int max = 0;
for (int i = 0; i < strings.length; i++) {
// 取出每个元素,并依次比较每一个字符
for (int j = i; j < strings.length; j++) {
char[] chars = strings[j].toCharArray();
int k = 0;
// 依次比较每一个元素,要到相同的则跳出
while (k < chars.length) {
if (strings[i].indexOf(chars[k]) != -1) break;
k++;
}
// 修改记录过的最大值
int tmp = strings[i].length() * strings[j].length();
if (k == chars.length && tmp > max) max = tmp;
}
}
// 输出结果
System.out.println(max);
}
❤️ END ❤️