题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
思路
采用双指针方法操作比较简单:
1. 定义一个保存最大长度变量max,两个移动的变量i,k和另外一个保存不重复字符串的变量sum_str
2. 对给定的字符串s进行遍历,然后判断sum_str是否包含当前的字符,如果不包含则K++,同时把当前的字符拼接到sum_str中,如果包含则i++,把当前循环的变量k重新赋值为i,把当前保存的sum_str=""
3. 把max中的值与sum_str的长度进行比较,如果max<len(sum_str) 则:max = len(sum_str)
4. 返回 max值即为所求
Rust语言实现
impl Solution {
pub fn length_of_longest_substring(s: String) -> i32 {
let seq: Vec<char> = s.chars().collect();
let mut sum_str:Vec<char> = vec![];
let mut i = 0;
let mut k = 0;
let mut max = 0;
let len = s.len();
while i < len && k < len {
if index_str(seq[k],sum_str.clone()) == -1 {
sum_str.push(seq[k]);
k += 1;
} else {
i += 1;
k = i;
sum_str = vec![];
}
if max < sum_str.len(){
max = sum_str.len()
}
}
return max as i32;
}
}
fn index_str(c:char, vec:Vec<char>)-> i32{
for item in vec {
if item == c {
return 1;
}
}
return -1
}
GO语言实现
func lengthOfLongestSubstring(s string) int {
sum_str := []byte{}
i := 0
j := 0
max := 0
lens := len(s)
for ;i < lens && j < lens; {
if findIndex(s[j],sum_str) == -1 {
sum_str = append(sum_str, s[j])
j ++
} else {
i++
j = i
sum_str = []byte{}
}
if max < len(sum_str){
max = len(sum_str)
}
}
return max
}
/**
查询在元素在切片的位置
*/
func findIndex(key byte,s []byte) int{
for i,value := range s {
if value == key {
return i
}
}
return -1
}
Python语言实现
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
sum_str = ""
i = k = 0
lens = len(s)
max = 0
while i < lens and k < lens:
if sum_str.find(s[k]) == -1:
sum_str += str(s[k])
k += 1
else:
i += 1
k = i
sum_str = ""
if max < len(sum_str):
max = len(sum_str)
return max
JavaScript语言实现
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var sum="";
var max=0;
var i=0;
var k=i;
while(i<s.length&&k<s.length){
if(sum.indexOf(s[k])===-1){
sum+=s[k];
k++;
}else{
i++;
k=i;
sum="";
}
max=Math.max(max,sum.length);
}
return max;
};
实验截图
资源下载
资源下载