leetcode

Leetcode problem solutions
git clone https://git.sinitax.com/sinitax/leetcode
Log | Files | Refs | sfeed.txt

commit 4caa3fd7f94d692b27db51e91283620eab31e31b
parent c54637f6eb8d480a682f85443b13884214c0ac65
Author: Louis Burda <quent.burda@gmail.com>
Date:   Sun, 24 Nov 2024 16:06:46 +0100

Add problem 1768

Diffstat:
A:w | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MCargo.toml | 4++++
Asrc/bin/1768-merge-strings-alternately.rs | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 164 insertions(+), 0 deletions(-)

diff --git a/:w b/:w @@ -0,0 +1,74 @@ +/// 1768. Merge Strings Alternately (Easy) +/// +/// You are given two strings word1 and word2. Merge the strings by adding +/// letters in alternating order, starting with word1. If a string is longer +/// than the other, append the additional letters onto the end of the merged +/// string. +/// +/// Return the merged string. +/// +/// *Example 1:* +/// +/// *Input:* word1 = "abc", word2 = "pqr" +/// *Output:* "apbqcr" +/// *Explanation:* The merged string will be merged as so: +/// word1: a b c +/// word2: p q r +/// merged: a p b q c r +/// +/// *Example 2:* +/// +/// *Input:* word1 = "ab", word2 = "pqrs" +/// *Output:* "apbqrs" +/// *Explanation:* Notice that as word2 is longer, "rs" is appended to the end. +/// word1: a b +/// word2: p q r s +/// merged: a p b q r s +/// +/// *Example 3:* +/// +/// *Input:* word1 = "abcd", word2 = "pq" +/// *Output:* "apbqcd" +/// *Explanation:* Notice that as word1 is longer, "cd" is appended to the end. +/// word1: a b c d +/// word2: p q +/// merged: a p b q c d +/// +/// *Constraints:* +/// +/// * 1 <= word1.length, word2.length <= 100 +/// * word1 and word2 consist of lowercase English letters. +/// + +use leetcode::*; + +struct Solution {} + +impl Solution { + pub fn merge_alternately(word1: String, word2: String) -> String { + let mut out = Vec::with_capacity(word1.len() + word2.len()); + let mut word1 = word1.chars().peekable(); + let mut word2 = word2.chars().peekable(); + while word1.peek().is_some() || word2.peek().is_some() { + if let Some(c) = word1.next() { + out.push(c); + } + if let Some(c) = word2.next() { + out.push(c) + } + } + out.into_iter().collect() + } +} + +pub fn main() { +} + +#[cfg(test)] +mod tests { + use crate::Solution; + + #[test] + fn test() { + } +} diff --git a/Cargo.toml b/Cargo.toml @@ -44,6 +44,10 @@ name = "19" path = "src/bin/0019-remove-nth-node-from-end-of-list.rs" [[bin]] +name = "1768" +path = "src/bin/1768-merge-strings-alternately.rs" + +[[bin]] name = "3254" path = "src/bin/3254-find-the-power-of-k-size-subarrays-i.rs" diff --git a/src/bin/1768-merge-strings-alternately.rs b/src/bin/1768-merge-strings-alternately.rs @@ -0,0 +1,86 @@ +/// 1768. Merge Strings Alternately (Easy) +/// +/// You are given two strings word1 and word2. Merge the strings by adding +/// letters in alternating order, starting with word1. If a string is longer +/// than the other, append the additional letters onto the end of the merged +/// string. +/// +/// Return the merged string. +/// +/// *Example 1:* +/// +/// *Input:* word1 = "abc", word2 = "pqr" +/// *Output:* "apbqcr" +/// *Explanation:* The merged string will be merged as so: +/// word1: a b c +/// word2: p q r +/// merged: a p b q c r +/// +/// *Example 2:* +/// +/// *Input:* word1 = "ab", word2 = "pqrs" +/// *Output:* "apbqrs" +/// *Explanation:* Notice that as word2 is longer, "rs" is appended to the end. +/// word1: a b +/// word2: p q r s +/// merged: a p b q r s +/// +/// *Example 3:* +/// +/// *Input:* word1 = "abcd", word2 = "pq" +/// *Output:* "apbqcd" +/// *Explanation:* Notice that as word1 is longer, "cd" is appended to the end. +/// word1: a b c d +/// word2: p q +/// merged: a p b q c d +/// +/// *Constraints:* +/// +/// * 1 <= word1.length, word2.length <= 100 +/// * word1 and word2 consist of lowercase English letters. +/// +use leetcode::*; + +struct Solution {} + +impl Solution { + pub fn merge_alternately(word1: String, word2: String) -> String { + let mut out = Vec::with_capacity(word1.len() + word2.len()); + let mut word1 = word1.chars().peekable(); + let mut word2 = word2.chars().peekable(); + while word1.peek().is_some() || word2.peek().is_some() { + if let Some(c) = word1.next() { + out.push(c); + } + if let Some(c) = word2.next() { + out.push(c) + } + } + out.into_iter().collect() + } +} + +pub fn main() { + println!("{}", Solution::merge_alternately(arg(1), arg(2))) +} + +#[cfg(test)] +mod tests { + use crate::Solution; + + #[test] + fn test() { + assert_eq!( + Solution::merge_alternately("abc".to_string(), "pqr".to_string()), + "apbqcr".to_string() + ); + assert_eq!( + Solution::merge_alternately("ab".to_string(), "pqrs".to_string()), + "apbqrs".to_string() + ); + assert_eq!( + Solution::merge_alternately("abcd".to_string(), "pq".to_string()), + "apbqcd".to_string() + ); + } +}