3744. Find Kth Character in Expanded String π
December 15, 2025 Β· View on GitHub
Description
You are given a string s consisting of one or more words separated by single spaces. Each word in s consists of lowercase English letters.
We obtain the expanded string t from s as follows:
- For each word in
s, repeat its first character once, then its second character twice, and so on.
For example, if s = "hello world", then t = "heelllllllooooo woorrrllllddddd".
You are also given an integer k, representing a valid index of the string t.
Return the kth character of the string t.
Β
Example 1:
Input: s = "hello world", k = 0
Output: "h"
Explanation:
t = "heelllllllooooo woorrrllllddddd". Therefore, the answer is t[0] = "h".
Example 2:
Input: s = "hello world", k = 15
Output: " "
Explanation:
t = "heelllllllooooo woorrrllllddddd". Therefore, the answer is t[15] = " ".
Β
Constraints:
1 <= s.length <= 105scontains only lowercase English letters and spaces' '.sdoes not contain any leading or trailing spaces.- All the words in
sare separated by a single space. 0 <= k < t.length. That is,kis a valid index oft.
Solutions
Solution 1: Math + Simulation
We first split the string into multiple words by spaces. For each word , we can calculate the length it occupies in the expanded string as .
If , it means the -th character is a space, and we can directly return a space.
If , it means the -th character is not in the expanded part of the current word. We subtract the expanded length of the current word and the space length $1k$, and continue processing the next word.
Otherwise, the -th character is in the expanded part of the current word. We can find the -th character by simulating the expansion process:
- Initialize a variable to represent the number of characters that have been expanded so far.
- Iterate through each character of the word :
- Increase by .
- If , it means the -th character is , and we return this character.
The time complexity is and the space complexity is , where is the length of the string .
Python3
class Solution:
def kthCharacter(self, s: str, k: int) -> str:
for w in s.split():
m = (1 + len(w)) * len(w) // 2
if k == m:
return " "
if k > m:
k -= m + 1
else:
cur = 0
for i in range(len(w)):
cur += i + 1
if k < cur:
return w[i]
Java
class Solution {
public char kthCharacter(String s, long k) {
for (String w : s.split(" ")) {
long m = (1L + w.length()) * w.length() / 2;
if (k == m) {
return ' ';
}
if (k > m) {
k -= m + 1;
} else {
long cur = 0;
for (int i = 0;; ++i) {
cur += i + 1;
if (k < cur) {
return w.charAt(i);
}
}
}
}
return ' ';
}
}
C++
class Solution {
public:
char kthCharacter(string s, long long k) {
stringstream ss(s);
string w;
while (ss >> w) {
long long m = (1 + (long long) w.size()) * (long long) w.size() / 2;
if (k == m) {
return ' ';
}
if (k > m) {
k -= m + 1;
} else {
long long cur = 0;
for (int i = 0;; ++i) {
cur += i + 1;
if (k < cur) {
return w[i];
}
}
}
}
return ' ';
}
};
Go
func kthCharacter(s string, k int64) byte {
for _, w := range strings.Split(s, " ") {
m := (1 + int64(len(w))) * int64(len(w)) / 2
if k == m {
return ' '
}
if k > m {
k -= m + 1
} else {
var cur int64
for i := 0; ; i++ {
cur += int64(i + 1)
if k < cur {
return w[i]
}
}
}
}
return ' '
}
TypeScript
function kthCharacter(s: string, k: number): string {
for (const w of s.split(' ')) {
const m = ((1 + w.length) * w.length) / 2;
if (k === m) {
return ' ';
}
if (k > m) {
k -= m + 1;
} else {
let cur = 0;
for (let i = 0; ; ++i) {
cur += i + 1;
if (k < cur) {
return w[i];
}
}
}
}
return ' ';
}