Loading

Java/Rust/Go无重复字符的最长子串

无重复字符的最长子串

Java/Go/Rust实现找出无重复字符的最长子串,虽然写的不咋地

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int sLen = s.length();
        int maxLen = 0;
        int lastPosition = 0;
        StringBuilder subBuilder = new StringBuilder();
        for (int i = 0; i < sLen; i++) {
            int var = subBuilder.indexOf(String.valueOf(s.charAt(i)), lastPosition);
            if (var != -1){
                maxLen = Math.max(i - lastPosition, maxLen);
                lastPosition = var + 1;
            }
            subBuilder.append(s.charAt(i));
        }

        maxLen = Math.max(sLen - lastPosition, maxLen);
        return maxLen;
    }
}

go实现:

func lengthOfLongestSubstring(s string) int {
	hist := make(map[int32]int)
	start := 0
	maxLen := 0
	for i, v := range s {
		val, ok := hist[v]
		if ok && val >= start {
			start = val + 1
		}
		if i-start+1 > maxLen {
			maxLen = i - start + 1
		}
		hist[v] = i
	}
	return maxLen
}

RUST实现:

use std::collections::HashMap;
use std::cmp::max;
impl Solution{
    pub fn length_of_longest_substring(s: String) -> i32{
        let mut map :HashMap<char, i32> = HashMap::new();
        let mut res : i32 = 0;
        let mut start : i32 = 0;
        s.chars().enumerate().for_each(|(index, value)| {
            match map.get(&value){
                Some(n)=>{
                    start = max(start, n + 1);
                    res = max(res, index as i32 - start + 1);
                },
                None=>res = max(res, index as i32 - start + 1),
            }
            map.insert(value, index as i32);
        });

        res
    }
}
posted @ 2022-04-30 12:40  AxiaNibiru  阅读(47)  评论(0)    收藏  举报