Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 101534d

Browse files
committed
Solve #290
1 parent 5f80f94 commit 101534d

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

‎src/lib.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,3 +219,4 @@ mod n0282_expression_add_operators;
219219
mod n0283_move_zeroes;
220220
mod n0287_find_the_duplicate_number;
221221
mod n0289_game_of_life;
222+
mod n0290_word_pattern;

‎src/n0290_word_pattern.rs‎

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/**
2+
* [290] Word Pattern
3+
*
4+
* Given a pattern and a string str, find if str follows the same pattern.
5+
*
6+
* Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.
7+
*
8+
* Example 1:
9+
*
10+
*
11+
* Input: pattern = "abba", str = "dog cat cat dog"
12+
* Output: true
13+
*
14+
* Example 2:
15+
*
16+
*
17+
* Input:pattern = "abba", str = "dog cat cat fish"
18+
* Output: false
19+
*
20+
* Example 3:
21+
*
22+
*
23+
* Input: pattern = "aaaa", str = "dog cat cat dog"
24+
* Output: false
25+
*
26+
* Example 4:
27+
*
28+
*
29+
* Input: pattern = "abba", str = "dog dog dog dog"
30+
* Output: false
31+
*
32+
* Notes:<br />
33+
* You may assume pattern contains only lowercase letters, and str contains lowercase letters that may be separated by a single space.
34+
*
35+
*/
36+
pub struct Solution {}
37+
38+
// submission codes start here
39+
40+
use std::collections::HashMap;
41+
impl Solution {
42+
pub fn word_pattern(pattern: String, s: String) -> bool {
43+
let mut p2s = HashMap::new();
44+
let mut s2p = HashMap::new();
45+
let mut s_iter = s.split(" ");
46+
let mut p_iter = pattern.chars();
47+
loop {
48+
match (s_iter.next(), p_iter.next()) {
49+
(Some(sub), Some(ch)) => {
50+
if *p2s.entry(ch).or_insert(sub) != sub ||
51+
*s2p.entry(sub).or_insert(ch) != ch {
52+
return false
53+
}
54+
},
55+
(None, None) => break,
56+
_ => return false,
57+
}
58+
}
59+
true
60+
}
61+
}
62+
63+
// submission codes end
64+
65+
#[cfg(test)]
66+
mod tests {
67+
use super::*;
68+
69+
#[test]
70+
fn test_290() {
71+
assert_eq!(Solution::word_pattern("abba".to_owned(), "dog cat cat dog".to_owned()), true);
72+
assert_eq!(Solution::word_pattern("aaaa".to_owned(), "dog cat cat dog".to_owned()), false);
73+
assert_eq!(Solution::word_pattern("abba".to_owned(), "dog cat cat fish".to_owned()), false);
74+
}
75+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /