Welcome to Subscribe On Youtube
1859. Sorting the Sentence
Description
A sentence is a list of words that are separated by a single space with no leading or trailing spaces. Each word consists of lowercase and uppercase English letters.
A sentence can be shuffled by appending the 1-indexed word position to each word then rearranging the words in the sentence.
- For example, the sentence
"This is a sentence"
can be shuffled as"sentence4 a3 is2 This1"
or"is2 sentence4 This1 a3"
.
Given a shuffled sentence s
containing no more than 9
words, reconstruct and return the original sentence.
Example 1:
Input: s = "is2 sentence4 This1 a3" Output: "This is a sentence" Explanation: Sort the words in s to their original positions "This1 is2 a3 sentence4", then remove the numbers.
Example 2:
Input: s = "Myself2 Me1 I4 and3" Output: "Me Myself and I" Explanation: Sort the words in s to their original positions "Me1 Myself2 and3 I4", then remove the numbers.
Constraints:
2 <= s.length <= 200
s
consists of lowercase and uppercase English letters, spaces, and digits from1
to9
.- The number of words in
s
is between1
and9
. - The words in
s
are separated by a single space. s
contains no leading or trailing spaces.
Solutions
Solution 1: String Splitting
First, we split the string $s$ by spaces to get the string array $words$. Then, we create a string array $ans$ of length $ | words | $ to store the answer. |
Next, we iterate over each string $w$ in the string array $words$, find the position $i$ represented by the last character of $w$, then take the first $ | w | -1$ characters of $w$ as the new string $w’$, and place $w’$ in the $i$th position of the array $ans$. |
Finally, we join the array $ans$ into a string by spaces, which is the answer.
The time complexity is $O(n)$, and the space complexity is $O(n)$. Where $n$ is the length of the string $s$.
-
class Solution { public String sortSentence(String s) { String[] ws = s.split(" "); int n = ws.length; String[] ans = new String[n]; for (int i = 0; i < n; ++i) { String w = ws[i]; ans[w.charAt(w.length() - 1) - '1'] = w.substring(0, w.length() - 1); } return String.join(" ", ans); } }
-
class Solution { public: string sortSentence(string s) { istringstream iss(s); string w; vector<string> ws; while (iss >> w) { ws.push_back(w); } vector<string> ss(ws.size()); for (auto& w : ws) { ss[w.back() - '1'] = w.substr(0, w.size() - 1); } string ans; for (auto& w : ss) { ans += w + " "; } ans.pop_back(); return ans; } };
-
class Solution: def sortSentence(self, s: str) -> str: ws = [(w[:-1], int(w[-1])) for w in s.split()] ws.sort(key=lambda x: x[1]) return ' '.join(w for w, _ in ws)
-
func sortSentence(s string) string { ws := strings.Split(s, " ") ans := make([]string, len(ws)) for _, w := range ws { ans[w[len(w)-1]-'1'] = w[:len(w)-1] } return strings.Join(ans, " ") }
-
function sortSentence(s: string): string { const ws = s.split(' '); const ans = Array(ws.length); for (const w of ws) { ans[w.charCodeAt(w.length - 1) - '1'.charCodeAt(0)] = w.slice(0, -1); } return ans.join(' '); }
-
/** * @param {string} s * @return {string} */ var sortSentence = function (s) { const ws = s.split(' '); const ans = Array(ws.length); for (const w of ws) { ans[w.charCodeAt(w.length - 1) - '1'.charCodeAt(0)] = w.slice(0, -1); } return ans.join(' '); };