leetcode3. Longest Substring Without Repeating Characters

来源:互联网 发布:mac os 10.11 dmg下载 编辑:程序博客网 时间:2024/06/07 17:51

leetcode3. Longest Substring Without Repeating Characters

思路

  1. 用一个数组保存当前迭代过程内的子串中每个字符出现的位置charPos,用hash的方式,并初始化-1(初始化的值不能是任何可能的位置值,如0);
  2. 定义一个游标指针,扫描字符串s,如果当前的字符在本次子串中没有重现(charPos[s[curPos]]<-1),更新该子串长度、该子串所有字符出现的位置数组和当前的游标,如果当前的字符在本次子串中重现了(charPos[s[curPos]]>-1),那么,更新最大子串长度,重置位置记录数组charPos和子串长度,并更新游标;
  3. 循环2,知道游标遍历了数组;
  4. 考虑最后一个子串的情况(游标已经遍历数组,但是因为没有遇到重现的情况,导致最后一个字符长度和当前最长长度没有进行对比),最后返回;
class Solution {public:    int lengthOfLongestSubstring(string s) {        int charPos[130] = { 0 };        memset(charPos, -1, 130 * sizeof(int));        int size = s.size();        int curPos = 0;        int curLen = 0;        int maxLen = 0;        while (curPos < size)        {            if (charPos[s[curPos]] <= -1) {                curLen++;                charPos[s[curPos]] = curPos;                curPos++;            }            else {                maxLen = curLen > maxLen ? curLen : maxLen;                curLen = 0;                curPos = charPos[s[curPos]] + 1;                memset(charPos, -1, 130* sizeof(int));            }        }        maxLen = curLen > maxLen ? curLen : maxLen;        return maxLen;    }};
阅读全文
0 0
原创粉丝点击