题目:

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

示例:

abcabcbb

输出的结果应该是3,最长的无重复的字串是'abc'

果然无论做什么都要静下心来啊!昨晚上卡了一个多小时愣是没改出来,今天仔细的考虑了一下,半个小时搞定…………

思路:

简单的滑动窗口问题,遍历字符串,将出现过得字符用map将它的下标存下来。

当遍历过程中出现map>0的情况,说明出现了重复的字符。此时的i-j(i是窗口右边的指针,j是窗口左边的指针)即是该字串的长度,维护一下答案的最大值。

注意:

1. 因为要用map>0判断重复字符是否出现,所以要预先在原来的字符串前边加一个特殊字符,预处理一下,使下标从1开始。

2. 要处理好字符串最后一个字符的情况

代码:

#include <bits/stdc++.h>
#include <iostream> using namespace std; //alkbcdb
int lengthOfLongestSubstring(string s)
{
map<char,int> mp;
s = "#"+s;
//cout<<"s: "<<s.length()<<endl;
int j = ,ans = ;
for(int i=; i<=s.length(); i++)
{
char idx = s[i];
if(i == s.length()-)
{
if(mp[idx] > )
ans = max(ans,i-j);
else
ans = max(ans,i-j+);
}
else
{
if(mp[idx] > )
{
//cout<<"idx: "<<idx<<" j: "<<j<<" i: "<<i<<endl;
ans = max(ans,i-j);
while(j <= mp[idx])
{
mp[s[j++]] = ;
}
mp[idx] = i;
//cout<<"later j: "<<j<<" and ans: "<<ans<<endl;
}
else
mp[idx] = i;
} }
return ans;
} int main()
{
string str;
while(cin>>str)
{
cout<<lengthOfLongestSubstring(str)<<endl;
}
return ;
}

LeetCode#3 - 无重复字符的最长字串(滑动窗口)的更多相关文章

  1. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...

  2. LeetCode 第 3 题:无重复字符的最长子串(滑动窗口)

    LeetCode 第 3 题:无重复字符的最长子串 (滑动窗口) 方法:滑动窗口 滑动窗口模板问题:右指针先走,满足了一定条件以后,左指针向前走,直到不满足条件. 特点:左右指针的方向是一致的,并且是 ...

  3. 【leetcode算法-中等】3. 无重复字符的最长字串

    [题目描述] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 " ...

  4. LeetCode-3.无重复字符的最长字串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  5. Leetcode3.Longest Substring Without Repeating Characters无重复字符的最长字串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...

  6. Leetcode(三)无重复字符的最长子串

    3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...

  7. [LeetCode] 3. 无重复字符的最长子串

    题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...

  8. 【leetcode 3. 无重复字符的最长子串】解题报告

    思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...

  9. LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...

随机推荐

  1. IDEA 服务器热部署详解(On Update action/On frame deactivation)

    https://blog.csdn.net/w15321271041/article/details/80597962 场景:一般服务器(比如tomcat,jboss等)启动以后,我们还需要进一步修改 ...

  2. Java异常的限制

    Java异常的限制 我在看JAVA编程思想,讲到异常的限制,看的代码和解释,非常的难看下去,直接写了他的代码. java编程思想关于异常限制的逻辑 它以棒球比赛为例子. 定义了Inning(一局比赛) ...

  3. 第1节 storm编程:2、storm的基本介绍

    课程大纲: 1.storm的基本介绍 2.storm的架构模型 3.storm的安装 4.storm的UI管理界面 5.storm的编程模型 6.storm的入门程序 7.storm的并行度 8.st ...

  4. 第1节 kafka消息队列:5、javaAPI操作

    8.kafka的API 详见代码   第一步:导入kafka的开发jar包 Kafka生产者 Kafka消费者

  5. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

  6. 「AT1983 BBQ Hard」

    呦,来一次久违的BBQ吧! AT题...日本的题库质量一向很高 这题是有关组合数的DP... 前置芝士 快速计算组合数,具体还是自行百度. 膜域下的除法. 具体做法 题目中的问题: \(\sum_{i ...

  7. GIMP

    1. 认识GIMP 2. GIMP与Photoshop的对比 3. GIMP官方手册教程 4. 2本GIMP的外文书下载 5. 2个外部入门教程 6. 其他相关软件 1. 认识GIMP GIMP是可用 ...

  8. IOS 常用View属性设置

    设置按钮属性 1.设置按钮背景颜色 backgroundColor @property (weak, nonatomic) IBOutlet UIButton *deleteButton; self. ...

  9. 多实例mysql的安装和管理

    多实例mysql的安装和管理 http://blog.chinaunix.net/uid-20639775-id-3438560.html mysql的多实例有两种方式可以实现,两种方式各有利弊.第一 ...

  10. Net Core3.1 添加 Swagger

    一.为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远. 前端和后端的唯一联系,变成了 ...