本文共 993 字,大约阅读时间需要 3 分钟。
这个真没搞太懂 改天搞
题意: 最长的吴重复字符子串
当时我的思路是,利用have数组来记录当前字符最近一次出现的位置,假定从Position 之后的字符串都是无重复的。
如果遍历到的当前字符的have[s[i]] 小于position,那么说明该字符在position之后没有出现过,无重复,那么更新have[s[i]] = i 当前的位置。
如果遍历到的当前的字的have[s[i]] 大于position, 那么说明该字符在position之后出现重复,需要计算该段无重复字符串的长度 = i - position。 同时,更新position为该重复出现的字符的上一次出现的位置 position = have[s[i]]。 更新该字符的新位置have[s[i]] = i; 更新最大值。
class Solution {public: int lengthOfLongestSubstring(string s) { int have[256], len,len1,len2; int max = 0, position = 0; memset(have,0,256*sizeof(int)); for(int i = 0; i < s.length(); i++) { if(i == s.length()-1) { if(have[s[i]] <= position) { len = i+1-position; max = len > max ? len : max; } } if(have[s[i]] <= position) { have[s[i]] = i+1; } else { len = i-position; max = len > max ? len : max; position = have[s[i]]; have[s[i]] = i+1; } // cout << i+1 << "\t" << s[i] << "\t" <<< "\t" << position << endl; } return max; }};
转载地址:http://wktsi.baihongyu.com/