已知一个字符串数组words,要求寻找其中两个没有重复字符的字符串,使得这两个字符串的长度乘积最大,输出这个最大的乘积。如:
words=["abcd","wxyh","defgh"], 其中不包含重复字符的两个字符串是"abcd"和"wxyh",则输出16
words=["a","aa","aaa","aaaa"], 找不到满足要求的两个字符串,则输出0
数据范围:输入的字符串长度满足 ,保证只包含小写字母
Input:
["a","ab","abc","cd","bcd","abcd"]
Output:
4
["a","ab","abc","cd","bcd","abcd"]
4
Input中,不包含相同字符的有三对:
"ab"和"cd"
"a"和"cd"
"a"和"bcd"
所以字符串长度乘积的最大值是4
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); String sub = str.substring(1,str.length()-1); String[] strs = sub.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++){ for (int j=i+1;j<strs.length;j++){ set.clear(); int k; for (k=0;k<strs[i].length();k++){ set.add(strs[i].charAt(k)); } for (k=0;k<strs[j].length();k++){ if (set.contains(strs[j].charAt(k))) break; } if (k == strs[j].length()){ int length = strs[i].length()*strs[j].length(); if (length > max) max = length; } } } System.out.println(max); } }