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
}
}

浙公网安备 33010602011771号