1. 无重复字符的最长子串

(s 由英文字母、数字、符号和空格组成)
1.1 题目解析
这道题要求找到一个字符串中不包含重复字符的最长子串的长度。子串必须是连续的字符序列,不是子序列,不能跳着选字符。
1.2 暴力解法
最开始的想法很简单:把每个可能的子串都检查一遍。从字符串的第一个字符开始,看看能往右延伸多远不出现重复字符,记录这个长度,然后从第二个字符开始同样检查,一直试完所有起始位置。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
if(n == 0) return 0;
int maxlength = 1;
for(int i = 0; i < n; i++) {
int a[256] = {0}; // 用数组记录字符出现次数
for(int j = i; j < n; j++) {
int k = (int)s[j]; // 字符转成 ASCII 码值
a[k]++;
if(a[k] == 2) { // 某个字符出现两次,说明有重复
maxlength = max(maxlength, j - i);
break;
}
maxlength = max(maxlength, j - i + 1);
}
}
return maxlength;
}
};



