diff options
author | crupest <crupest@outlook.com> | 2020-05-07 22:37:39 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-05-07 22:37:39 +0800 |
commit | 5b3584fcc79c87f87edebbf08f2f9c144f298eed (patch) | |
tree | 913e0617dc8c823fa438c130eef1fb045f2af8d7 /works/solutions/rust/src/length_of_longest_substring.rs | |
parent | b7ffb156cd1566565ceeef1801e6910d9981ecda (diff) | |
download | crupest-5b3584fcc79c87f87edebbf08f2f9c144f298eed.tar.gz crupest-5b3584fcc79c87f87edebbf08f2f9c144f298eed.tar.bz2 crupest-5b3584fcc79c87f87edebbf08f2f9c144f298eed.zip |
import(solutions): Move rust codes into sub dir.
Diffstat (limited to 'works/solutions/rust/src/length_of_longest_substring.rs')
-rw-r--r-- | works/solutions/rust/src/length_of_longest_substring.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/works/solutions/rust/src/length_of_longest_substring.rs b/works/solutions/rust/src/length_of_longest_substring.rs new file mode 100644 index 0000000..cbd5e14 --- /dev/null +++ b/works/solutions/rust/src/length_of_longest_substring.rs @@ -0,0 +1,47 @@ +use super::Solution;
+
+impl Solution {
+ pub fn length_of_longest_substring(s: String) -> i32 {
+ let mut map: [i32; std::u8::MAX as usize] = [-1; std::u8::MAX as usize];
+ let mut last_index: i32 = 0;
+ let mut result: i32 = 0;
+ let bytes = s.as_bytes();
+ for (i, c) in bytes.iter().enumerate() {
+ let i = i as i32;
+ let c = *c as usize;
+ let li = map[c];
+ if li >= last_index {
+ last_index = li + 1;
+ map[c] = i;
+ } else {
+ map[c] = i;
+ let length = i - last_index + 1;
+ if length > result {
+ result = length;
+ }
+ }
+ }
+ result
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::Solution;
+
+ #[test]
+ fn test() {
+ assert_eq!(
+ Solution::length_of_longest_substring("abcabcbb".to_string()),
+ 3
+ );
+ assert_eq!(
+ Solution::length_of_longest_substring("bbbbb".to_string()),
+ 1
+ );
+ assert_eq!(
+ Solution::length_of_longest_substring("pwwkew".to_string()),
+ 3
+ );
+ }
+}
|