Description
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 , with "wke" the length of 3. Note that the answer must be a substring, "wke" is a subsequence and not a substring.
思路
题意:给定一个字符串,问最长且不包含相同字母的子串为多少。
题解:具体实现细节看代码
C++:
class Solution {
public:
//18ms
int lengthOfLongestSubstring(string s) {
int pos[256];
memset(pos,-1,sizeof(pos));
int st = 0,ed = 0,res = 0;
int len = s.size();
for (int i = 0;i < len;i++){
int index = s[i];
if (pos[index] == -1 || pos[index] < st){
pos[index] = i;
res = max(res,i - st + 1);
}else{
st = pos[index] + 1;
pos[index] = i;
}
}
return res;
}
};
Java:
public class Solution {
//56ms
public int lengthOfLongestSubstring(String s) {
int[] pos = new int[256];
char[] str = s.toCharArray();
Arrays.fill(pos,-1);
int st = 0,res = 0;
int len = s.length();
for (int i = 0;i < len;i++){
int index = str[i];
if (pos[index] == -1 || pos[index] < st){
pos[index] = i;
res = Math.max(res,i - st + 1);
}else {
st = pos[index] + 1;
pos[index] = i;
}
}
return res;
}
}