zoukankan      html  css  js  c++  java
  • 【LeetCode】003 Longest Substring Without Repeating Characters

    题目:LeetCode 003 Longest Substring Without Repeating Characters

    题意:给一个字符串,找到一个没有重复字符的最长子串。

    样例:”bbbbb” 返回”b”的长度1;”abcabcbb”返回”abc”的长度3。

    思路:

    动态规划。dp[i]表示以第i个字符为结尾的无重复字符的子串的最长的长度,需要一个辅助数组idx[s[i]]记录字符当前字符s[i]上一次出现的位置,如果未出现过则为-1。所以得到如下的递推公式:

    另外由于不确定字符串长度的范围,所以利用滚动数组实现。dp[i&1]由dp[(i-1)&1]推导而来。

    代码如下:

     1 class Solution {
     2 public:
     3     int lengthOfLongestSubstring(string s) {
     4         int len = s.length();
     5         if(len == 0) return len;
     6         int ans = 1, idx[300], dp[2];
     7         memset(idx, -1, sizeof(idx));
     8         dp[0] = 1;
     9         idx[s[0]] = 0;
    10         for(int i = 1; i < len; i++)
    11         {
    12             if(idx[s[i]] == -1)
    13                 dp[i&1] = dp[(i-1)&1]+1;
    14             else
    15                 dp[i&1] = min(i-idx[s[i]], dp[(i-1)&1]+1);
    16             idx[s[i]] = i;
    17             ans = max(ans, dp[i&1]);
    18         }
    19         return ans;
    20     }
    21 };
  • 相关阅读:
    spring快速入门
    Vue整合ElementUI搭建项目
    .Net的Rsa解密
    Maven配置国内仓库
    pom.xml
    SpringBoot文件打包后修改配文件
    .net 过滤器
    c#语法糖汇总
    git修改远程地址
    abp Application层,接口服务层,获取请求的信息
  • 原文地址:https://www.cnblogs.com/kathyrine/p/4457996.html
Copyright © 2011-2022 走看看