解题思路
- 先提取输入的字符串数组
- 用类似冒泡方式遍历并判断两个字符串是否有重复
- 满足要求就计算乘积并保留最大乘积
法一
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
// 提取完整的字符串
str = str.substring(1, str.length() - 1); // 去掉输入的'[' 和 ']'字符
String[] strs = str.split(","); // 先根据 ',' 来简单筛选字符数组中的字符串
for (int i = 0; i < strs.length; i++) {
if (strs[i].length() == 0) {
continue;
}
// 去掉简单筛选的头尾,即 " 和 ",得到完整的字符串
strs[i] = strs[i].substring(1, strs[i].length() - 1);
}
int max = 0; // 记录不重复字符串的长度乘积
HashSet<Character> set = new HashSet<>(); // 存储一个字符串的每个字符
// 控制字符串和后面的比较,在依次递进
for (int i = 0;i < strs.length; i++) {
// 控制第 j 个字符串和后面的比较
for (int j = i + 1; j < strs.length; j++) {
int index = 0; // 主要用户记录该字符串索引到的位置
// 将字符串的字符一个个存入set中当作key
for (; index < strs[i].length(); index++) {
set.add(strs[i].charAt(index));
}
// 如果有重复的就退出,进而index != strs[j].length()
for (index = 0;index < strs[j].length(); index++) {
if (set.contains(strs[j].charAt(index))) {
break;
}
}
// 判断前面的for是否有退出
if (index == strs[j].length()) {
int temp = strs[i].length() * strs[j].length();
if (temp > max) {
max = temp;
}
}
set.clone(); // 清除set内容,为下一个字符串准备
}
}
System.out.println(max);
}
}
法二(相对法一:没有使用HashSet而是直接使用字符串进行对比)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
// 提取完整的字符串
str = str.substring(1, str.length() - 1); // 去掉输入的'[' 和 ']'字符
String[] strs = str.split(","); // 先根据 ',' 来简单筛选字符数组中的字符串
for (int i = 0; i < strs.length; i++) {
if (strs[i].length() == 0) {
continue;
}
// 去掉简单筛选的头尾,即 " 和 ",得到完整的字符串
strs[i] = strs[i].substring(1, strs[i].length() - 1);
}
int max = 0; // 记录不重复字符串的长度乘积
// 控制字符串和后面的比较,在依次递进
for (int i = 0;i < strs.length; i++) {
// 控制第 j 个字符串和后面的比较
for (int j = i + 1; j < strs.length; j++) {
int index = 0; // 主要用户记录该字符串索引到的位置
// 如果有重复的就退出,进而index != strs[j].length()
for (;index < strs[j].length(); index++) {
if (strs[i].contains(strs[j].substring(index, index + 1))) {
break;
}
}
// 判断前面的for是否有退出
if (index == strs[j].length()) {
int temp = strs[i].length() * strs[j].length();
if (temp > max) {
max = temp;
}
}
}
}
System.out.println(max);
}
}