commit 4caa3fd7f94d692b27db51e91283620eab31e31b
parent c54637f6eb8d480a682f85443b13884214c0ac65
Author: Louis Burda <quent.burda@gmail.com>
Date: Sun, 24 Nov 2024 16:06:46 +0100
Add problem 1768
Diffstat:
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()
+ );
+ }
+}