leetcode_3Longest Substring Without Repeating Characters

来源:互联网 发布:苏宁物流成本数据分析 编辑:程序博客网 时间:2024/06/06 09:45

题目:

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring"pwke" is a subsequence and not a substring.

Subscribe to see which companies asked this question.


——————————————————————————————————————————————————————————————————————————


没有什么要求,那就用最简单的for循环吧~

代码:

class Solution {public:    int lengthOfLongestSubstring(string s) {       vector<char> st;       if(s.size()==1){           return 1;       }       for(int i = 0; i < s.size(); i++){        vector<char> inst;        inst.push_back(s[i]);           for(int j = i+1; j < s.size();j++){               int flag = 0;               for(int k = 0; k < inst.size(); k++){                   if(inst[k] == s[j]){                       flag = 1;                       break;                   }               }               if(flag == 0){                   inst.push_back(s[j]);                   if(inst.size() > st.size()){                       st = inst;                   }               }               else{                   if(inst.size() > st.size()){                       st = inst;                   }                   break;               }           }       }       return st.size();    }};

for里套for。但是这样写中间的某些细节也容易搞错。哎。

上传后一看速度排名只战胜了百分之七点几。。。

额。


意识到这样做是不够的。想其他方法也想不出来,就参考一下吧。

别人的思路:用map存每个数字对应的下标。长度就是两个数下标之差+1,也就是这个数与前一个数的前一位的(start)下标之差。

每次找到重复的之后,start变为这个重复的以前的数字。

厉害了

class Solution {public:    int lengthOfLongestSubstring(string s) {                map<char, int> charMap;        int start = -1;        int maxLen = 0;                for (int i = 0; i < s.size(); i++) {            if (charMap.count(s[i]) != 0) {                start = max(start, charMap[s[i]]);            }            charMap[s[i]] = i;            maxLen = max(maxLen, i-start);        }                return maxLen;    }};
得自习想想这个代码的思想。

0 0
原创粉丝点击