Hash Divided String
MEDIUMDescription
You are given a string s of length n and an integer k, where n is a multiple of k. Your task is to hash the string s into a new string called result, which has a length of n / k.
First, divide s into n / k substrings, each with a length of k. Then, initialize result as an empty string.
For each substring in order from the beginning:
- The hash value of a character is the index of that character in the English alphabet (e.g.,
'a' → 0,'b' → 1, ...,'z' → 25). - Calculate the sum of all the hash values of the characters in the substring.
- Find the remainder of this sum when divided by 26, which is called
hashedChar. - Identify the character in the English lowercase alphabet that corresponds to
hashedChar. - Append that character to the end of
result.
Return result.
Example 1:
Input: s = "abcd", k = 2
Output: "bf"
Explanation:
First substring: "ab", 0 + 1 = 1, 1 % 26 = 1, result[0] = 'b'.
Second substring: "cd", 2 + 3 = 5, 5 % 26 = 5, result[1] = 'f'.
Example 2:
Input: s = "mxz", k = 3
Output: "i"
Explanation:
The only substring: "mxz", 12 + 23 + 25 = 60, 60 % 26 = 8, result[0] = 'i'.
Constraints:
1 <= k <= 100k <= s.length <= 1000s.lengthis divisible byk.sconsists only of lowercase English letters.
Approaches
Checkout 2 different approaches to solve Hash Divided String. Click on different approaches to view the approach and algorithm in detail.
Iterating Through Substrings
This approach directly translates the problem description into code. It involves iterating through the string s in chunks of size k, creating a substring for each chunk, and then processing each substring to calculate the hash character. A StringBuilder is used to efficiently build the final result string.
Algorithm
- Initialize an empty
StringBuildercalledresult. - Loop from
i = 0tos.length() - 1with a step ofk. - Inside the loop, create a substring
chunkfrom indexitoi + k. - Initialize
currentSum = 0. - Iterate through each character of the
chunk. - For each character, add its hash value (
char - 'a') tocurrentSum. - After iterating through the chunk, calculate
hashedValue = currentSum % 26. - Convert
hashedValueto its corresponding character and append it toresult. - After the main loop, convert
resultto a string and return it.
The algorithm proceeds by dividing the string into n/k segments. A loop iterates with a step of k, and in each step, s.substring(i, i + k) is called to extract the current chunk. While this is conceptually simple, creating a new substring object in each iteration introduces memory and performance overhead. For each extracted substring, we then iterate through its characters to compute the sum of their hash values (char - 'a'). The sum is taken modulo 26, converted back to a character, and appended to a StringBuilder. This avoids the high cost of repeated string concatenation in Java.
class Solution {
public String hashDividedString(String s, int k) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i += k) {
String chunk = s.substring(i, i + k);
int currentSum = 0;
for (char c : chunk.toCharArray()) {
currentSum += c - 'a';
}
int hashedValue = currentSum % 26;
char hashedChar = (char) ('a' + hashedValue);
result.append(hashedChar);
}
return result.toString();
}
}
Complexity Analysis
Pros and Cons
- The code is very readable and closely follows the logic described in the problem statement.
- Creates
n/knew substring objects, which leads to unnecessary memory allocation and garbage collection overhead. This can be less performant than direct character access.
Code Solutions
Checking out 3 solutions in different languages for Hash Divided String. Click on different languages to view the code.
class Solution {
public
String stringHash(String s, int k) {
StringBuilder ans = new StringBuilder();
int n = s.length();
for (int i = 0; i < n; i += k) {
int t = 0;
for (int j = i; j < i + k; ++j) {
t += s.charAt(j) - 'a';
}
int hashedChar = t % 26;
ans.append((char)('a' + hashedChar));
}
return ans.toString();
}
}
Video Solution
Watch the video walkthrough for Hash Divided String
Similar Questions
5 related questions you might find useful
Data Structures:
Subscribe to Scale Engineer newsletter
Learn about System Design, Software Engineering, and interview experiences every week.
No spam, unsubscribe at any time.