3271. Hash Divided String
Description
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 <= 100
k <= s.length <= 1000
s.length
is divisible byk
.s
consists only of lowercase English letters.
Solutions
Solution 1: Simulation
We can simulate the process according to the steps described in the problem.
Traverse the string $s$, and each time take $k$ characters, calculate the sum of their hash values, denoted as $t$. Then, take $t$ modulo $26$ to find the corresponding character and add it to the end of the result string.
Finally, return the result string.
The time complexity is $O(n)$, where $n$ is the length of the string $s$. Ignoring the space consumption of the answer string, the space complexity is $O(1)$.
Python3
class Solution:
def stringHash(self, s: str, k: int) -> str:
ans = []
for i in range(0, len(s), k):
t = 0
for j in range(i, i + k):
t += ord(s[j]) - ord("a")
hashedChar = t % 26
ans.append(chr(ord("a") + hashedChar))
return "".join(ans)
Java
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();
}
}
C++
class Solution {
public:
string stringHash(string s, int k) {
string ans;
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[j] - 'a';
}
int hashedChar = t % 26;
ans += ('a' + hashedChar);
}
return ans;
}
};
Go
func stringHash(s string, k int) string {
n := len(s)
ans := make([]byte, 0, n/k)
for i := 0; i < n; i += k {
t := 0
for j := i; j < i+k; j++ {
t += int(s[j] - 'a')
}
hashedChar := t % 26
ans = append(ans, 'a'+byte(hashedChar))
}
return string(ans)
}
TypeScript
function stringHash(s: string, k: number): string {
const ans: string[] = [];
const n: number = s.length;
for (let i = 0; i < n; i += k) {
let t: number = 0;
for (let j = i; j < i + k; j++) {
t += s.charCodeAt(j) - 97;
}
const hashedChar: number = t % 26;
ans.push(String.fromCharCode(97 + hashedChar));
}
return ans.join('');
}