You are given two arrays a1 and a2 of strings.
Each string is composed with letters from a to z.
Let x be any string in the first array and y be any string in the second array.
Find max(abs(length(x) − length(y)))
If a1 and/or a2 are empty return -1 in each language except in Haskell (F#) where you will return Nothing (None).
example output:
a1 = ["hoqq", "bbllkw", "oox", "ejjuyyy", "plmiis", "xxxzgpsssa", "xxwwkktt", "znnnnfqknaz", "qqquuhii", "dvvvwz"] a2 = ["cccooommaaqqoxii", "gggqaffhhh", "tttoowwwmmww"] mxdiflg(a1, a2) --> 13
my solution:
import java.util.*;
class MaxDiffLength {
public static int mxdiflg(String[] a1, String[] a2) {
// your code
if (a1 == null || a1.length == 0 || a2 == null || a2.length == 0)
{return -1;}
int maxVal = Integer.MIN_VALUE;
for (int i = 0; i < a1.length; i++)
{
for (int j = 0; j < a2.length; j++)
{
int diff = Math.abs(a1[i].length() - a2[j].length());
if (diff > maxVal){
maxVal = diff;
}
}
}
return maxVal;
}
clever solution:
import java.util.Arrays;
class MaxDiffLength {
public static int mxdiflg(String[] a1, String[] a2) {
if(a1.length == 0 || a2.length == 0) return -1;
return Math.max(Arrays.stream(a1).mapToInt(s -> s.length()).max().getAsInt() - Arrays.stream(a2).mapToInt(s -> s.length()).min().getAsInt(),
Arrays.stream(a2).mapToInt(s -> s.length()).max().getAsInt() - Arrays.stream(a1).mapToInt(s -> s.length()).min().getAsInt());
}
}
best practice:
class MaxDiffLength {
public static int mxdiflg(String[] a1, String[] a2) {
if(a1.length==0||a2.length==0)
return -1;
int b1=0, b2=0;
int l1=Integer.MAX_VALUE, l2=Integer.MAX_VALUE;
for (String s : a1) {
b1 = Math.max(b1, s.length());
l1 = Math.min(l1, s.length());
}
for (String s : a2) {
b2 = Math.max(b2, s.length());
l2 = Math.min(l2, s.length());
}
return Math.max(Math.abs(b2-l1), Math.abs(b1-l2));
}
}
key point: need to understand String length and length() are different method
reference:
