[算法Rust,Go,Python,JS实现)]LeetCode之3-无重复字符的最长子串

版权声明:未经博主允许不得转载(https://github.com/ai-word) https://blog.csdn.net/BaiHuaXiu123/article/details/89014971

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 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;
};

实验截图
在这里插入图片描述
资源下载
资源下载
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/BaiHuaXiu123/article/details/89014971