计蒜客——最长不重复子串

xiaoxiao2021-02-28  42

题目描述:

给定一个字符串,找到最长的子串,要求该子串中没有重复的字符。

例如:

字符串abcabcbb的不含重复字符的 最长 子串为abc,长度为 333

bbbbbb的不含重复字符的 最长 子串为b,长度为 111

输入格式

输入包含多行,每一行对应一个长度不超过 100100100 的输出,直到遇到结束符为止。每行依次输入字符串s

输出格式

输出不含重复字符的 最长 子串的长度。

样例输入

hchzvfrkmlnozjk

样例输出

11

题目分析:求解最长不重复子串的长度。

方法分析:hash

#include <iostream> #include <cstring> using namespace std; int s[256]; int hash1(string x) { int maxnn=0; int start1=0; for(int i=0;i<x.length();i++){ if(s[x[i]]==-1){ s[x[i]]=i; }//没有映射就添加映射关系 else{//已经遇到重夊字符了 if(maxnn<i-start1){//当前长度比较 maxnn=i-start1; } for(int j=start1;j<s[x[i]];++j) s[x[j]]=-1; // 这部分变成没出现过 start1=s[x[i]]+1;//更新起点,头指针向后移动一位 s[x[i]]=i;//更新字符出现位置,去除前面相同字符的映射关系 } } if(x.length()-start1>maxnn) maxnn=x.length()-start1; // 从start1到最后的串是不重复子串 return maxnn; } int main() { string str; while(cin>>str){ memset(s,-1,sizeof(s)); cout<<hash1(str)<<endl; } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2624583.html

最新回复(0)