comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
Medium |
1292 |
Biweekly Contest 138 Q2 |
|
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.
We can simulate the process according to the steps described in the problem.
Traverse the string
Finally, return the result string.
The time complexity is
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)
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();
}
}
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;
}
};
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)
}
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('');
}