Участник:PinkHedgehog/partition-labels-in-rust — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
<code-rust>
+
 
 +
 
 +
https://leetcode.com/problems/partition-labels
 +
Решение на Rust:
 +
<code-cpp>
 +
 
 
impl Solution {
 
impl Solution {
 
     pub fn partition_labels(s: String) -> Vec<i32> {
 
     pub fn partition_labels(s: String) -> Vec<i32> {
Строка 50: Строка 55:
 
     }
 
     }
 
}
 
}
</code-rust>
+
</code-cpp>
  
 
[[Категория:На проверку]]
 
[[Категория:На проверку]]

Версия 19:52, 20 мая 2020


https://leetcode.com/problems/partition-labels Решение на Rust:

 
impl Solution {
    pub fn partition_labels(s: String) -> Vec<i32> {
        //Копировать от сих (см. конец кода)
        struct Letter {
            l: Vec<char>,
            first: usize,
            last: usize,
        }
 
        let mut stats: Vec<Letter> = Vec::new();
 
        for (i, c) in s.char_indices() {
            let mut not_found = true;
            for x in &mut stats{
                if x.l[0] == c {
                    x.last = i;
                    not_found = false;
                    break;
                }
            }
            if not_found {
                stats.push(Letter {l: vec![c], first: i, last: i})
            }
        }
        stats.sort_by(|x, y| {
            x.last.cmp(&y.last)
        });
        let mut flag = true;
        while flag {
            flag = false;
            for i in 0..stats.len() {
                let j = i + 1;
                if j >= stats.len() {
                    break;
                }
                if stats[i].last > stats[j].first {
                    let t = stats.remove(j);
                    for x in t.l {
                        stats[i].l.push(x);
                    }
                    stats[i].first = stats[i].first.min(t.first);
                    stats[i].last = stats[i].last.max(t.last);
                    flag = true;
                }
            }
        }
        return stats.iter().map(|x| (x.last - x.first + 1) as i32).collect();
        //До сих
    }
}