Skip to content

Commit 40a9e02

Browse files
committed
add 44;49;67;344;345;520;557
1 parent 6446a8c commit 40a9e02

7 files changed

+231
-0
lines changed

344.reverse-string.rs

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* @lc app=leetcode id=344 lang=rust
3+
*
4+
* [344] Reverse String
5+
*/
6+
7+
// @lc code=start
8+
impl Solution {
9+
pub fn reverse_string(s: &mut Vec<char>) {
10+
let N = s.len();
11+
for i in 0..N / 2 { s.swap(i, N-i-1); }
12+
}
13+
}
14+
// @lc code=end
15+

345.reverse-vowels-of-a-string.rs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* @lc app=leetcode id=345 lang=rust
3+
*
4+
* [345] Reverse Vowels of a String
5+
*/
6+
7+
// @lc code=start
8+
use std::collections::HashSet;
9+
10+
impl Solution {
11+
pub fn reverse_vowels(s: String) -> String {
12+
13+
let mut chars: Vec<char> = s.chars().collect();
14+
if chars.len() <= 1 { return s; }
15+
let vowels: HashSet<char> =
16+
['a', 'e', 'i', 'o', 'u',
17+
'A', 'E', 'I', 'O', 'U'].iter().cloned().collect();
18+
19+
let mut lo = 0;
20+
let mut hi = chars.len() - 1;
21+
22+
while lo < hi {
23+
while lo < hi && !vowels.contains(&chars[lo]) { lo += 1; }
24+
while lo < hi && !vowels.contains(&chars[hi]) { hi -= 1; }
25+
if lo < hi {
26+
chars.swap(lo, hi);
27+
lo += 1;
28+
hi -= 1;
29+
}
30+
}
31+
32+
chars.into_iter().collect()
33+
}
34+
}
35+
// @lc code=end
36+

44.wildcard-matching.rs

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* @lc app=leetcode id=44 lang=rust
3+
*
4+
* [44] Wildcard Matching
5+
*/
6+
7+
// @lc code=start
8+
impl Solution {
9+
pub fn is_match(s: String, p: String) -> bool {
10+
let schars: Vec<char> = s.chars().collect();
11+
let pchars: Vec<char> = p.chars().collect();
12+
13+
let s_len = schars.len();
14+
let p_len = pchars.len();
15+
16+
let mut dp = vec![vec![false; s_len + 1]; p_len + 1];
17+
18+
for i in 0..p_len+1 {
19+
for j in 0..s_len+1 {
20+
if i == 0 {
21+
dp[i][j] = j == 0;
22+
} else if j == 0 {
23+
dp[i][j] = dp[i-1][j] && pchars[i-1] == '*';
24+
} else {
25+
if pchars[i-1] == '?' || pchars[i-1] == schars[j-1] {
26+
dp[i][j] = dp[i-1][j-1];
27+
} else if pchars[i-1] == '*' {
28+
for k in 0..j+1 {
29+
if dp[i-1][k] {
30+
dp[i][j] = true;
31+
break;
32+
}
33+
}
34+
}
35+
}
36+
}
37+
}
38+
39+
// println!("{:?}", dp);
40+
dp[p_len][s_len]
41+
}
42+
43+
}
44+
// @lc code=end
45+

49.group-anagrams.rs

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* @lc app=leetcode id=49 lang=rust
3+
*
4+
* [49] Group Anagrams
5+
*/
6+
7+
// @lc code=start
8+
use std::collections::HashMap;
9+
10+
impl Solution {
11+
pub fn group_anagrams(strs: Vec<String>) -> Vec<Vec<String>> {
12+
let mut map: HashMap<Vec<u32>, Vec<String>> = HashMap::new();
13+
14+
for s in strs {
15+
let mut cnt = vec![0; 26];
16+
for ch in s.chars() {
17+
cnt[ch as usize - 'a' as usize] += 1;
18+
}
19+
let val = map.entry(cnt).or_insert(vec![]);
20+
(*val).push(s);
21+
}
22+
23+
let mut ans = vec![];
24+
25+
for vec in map.values() {
26+
ans.push(vec.clone());
27+
}
28+
ans
29+
30+
}
31+
}
32+
// @lc code=end
33+

520.detect-capital.rs

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* @lc app=leetcode id=520 lang=rust
3+
*
4+
* [520] Detect Capital
5+
*/
6+
7+
// @lc code=start
8+
impl Solution {
9+
pub fn detect_capital_use(word: String) -> bool {
10+
let mut is_uppercase = true;
11+
12+
let chars: Vec<char> = word.chars().collect();
13+
if chars.len() <= 1 { return true; }
14+
15+
for i in 1..chars.len() {
16+
if chars[i].is_ascii_lowercase() {
17+
if i == 1 {
18+
is_uppercase = false;
19+
} else {
20+
if is_uppercase {
21+
return false;
22+
}
23+
}
24+
} else if !is_uppercase {
25+
return false;
26+
}
27+
}
28+
29+
return chars[0].is_ascii_uppercase() || (chars[0].is_ascii_lowercase() && !is_uppercase);
30+
}
31+
}
32+
// @lc code=end
33+

557.reverse-words-in-a-string-iii.rs

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* @lc app=leetcode id=557 lang=rust
3+
*
4+
* [557] Reverse Words in a String III
5+
*/
6+
7+
// @lc code=start
8+
impl Solution {
9+
pub fn reverse_words(s: String) -> String {
10+
let iter = s.split(' ');
11+
12+
let mut ans = String::new();
13+
for word in iter {
14+
if ans.len() != 0 {
15+
ans.push(' ');
16+
}
17+
let revWord: String = word.chars().rev().collect();
18+
ans.push_str(&revWord);
19+
}
20+
ans
21+
}
22+
}
23+
// @lc code=end
24+

67.add-binary.rs

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* @lc app=leetcode id=67 lang=rust
3+
*
4+
* [67] Add Binary
5+
*/
6+
7+
// @lc code=start
8+
impl Solution {
9+
pub fn add_binary(a: String, b: String) -> String {
10+
let achars: Vec<char> = a.chars().collect();
11+
let bchars: Vec<char> = b.chars().collect();
12+
13+
let mut alen = achars.len();
14+
let mut blen = bchars.len();
15+
16+
let mut carry = 0;
17+
18+
let mut i = alen as i32 - 1;
19+
let mut j = blen as i32 - 1;
20+
21+
let mut res = String::new();
22+
23+
while i >= 0 || j >= 0 || carry > 0 {
24+
let mut achar = 0;
25+
let mut bchar = 0;
26+
if i >= 0 {
27+
achar = achars[i as usize].to_digit(10).unwrap();
28+
i -= 1;
29+
}
30+
if j >= 0 {
31+
bchar = bchars[j as usize].to_digit(10).unwrap();
32+
j -= 1;
33+
}
34+
35+
let sum = achar + bchar + carry;
36+
37+
res.push_str(&(sum % 2).to_string());
38+
carry = sum / 2;
39+
}
40+
41+
res.chars().rev().collect()
42+
}
43+
}
44+
// @lc code=end
45+

0 commit comments

Comments
 (0)