Amazon Interview Question
Backend DevelopersCountry: United States
string ReverseHash(string s) {
string hash_str;
int first = 0;
int last = s.length()-1;
while(first <= last) {
if(first != last) {
if(s[first] <= s[last]) {
hash_str.push_back(s[first]);
hash_str.push_back(s[last]);
} else {
hash_str.push_back(s[last]);
hash_str.push_back(s[first]);
}
} else {
hash_str.push_back(s[first]);
}
first++;
last--;
}
return hash_str;
}
string ReverseHash(string s) {
string hash_str;
int first = 0;
int last = s.length()-1;
while(first <= last) {
if(first != last) {
if(s[first] <= s[last]) {
hash_str.push_back(s[first]);
hash_str.push_back(s[last]);
} else {
hash_str.push_back(s[last]);
hash_str.push_back(s[first]);
}
} else {
hash_str.push_back(s[first]);
}
first++;
last--;
}
return hash_str;
}
In Swift,
func Hash(_ string: String) -> String {
let array = string.map({ $0 })
let reversedArray = string.reversed().map({ $0 })
var hashSeed = [UInt32]()
for (chara1, chara2) in zip(array, reversedArray) {
let val1 = chara1.unicodeScalars.reduce(0, { (result, scalar) -> UInt32 in
scalar.value
})
let val2 = chara2.unicodeScalars.reduce(0, { (result, scalar) -> UInt32 in
scalar.value
})
hashSeed.append(val1 + val2)
}
print("\(string) = \(hashSeed)")
return hashSeed.reduce("", { $0 + String($1) })
}
Hash("banana") == Hash("ananab")
Hash("banana") == Hash("banaaa")
public static String revHash(String arr) throws NoSuchAlgorithmException {
StringBuilder stringBuilder = new StringBuilder();
int N = arr.length();
for (int i = 0; i < N / 2; i++) {
int numericValue = (int) (arr.charAt(i));
numericValue += (int) (arr.charAt(N - i - 1));
stringBuilder.append((char) numericValue);
}
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
return printHexBinary(messageDigest.digest(stringBuilder.toString().getBytes()));
}
The input can be combined with the reverse input by summing their ascii values. this string can then be hashed with a standard hash function. in python:
yields:
- tom.hostyn March 15, 2018