Question: 给定一个字符串,找出不含有重复字符的最长子串的长度。 Ex: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。 给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。 给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。 oc解法:
/*
用字典,key是str[i]的值,value记录位置(0,1,2...).
maxLength 用来记录最长无重复子串的长度,left 指向该无重复子串左边的起始位置
*/
+ (NSInteger)noRepatStrCountForStr:(NSString *)str
{
if (!str.length) {
return -1;
}
if (str.length==1) {
return 1;
}
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:0];
NSInteger maxLength = 0;//无重复字符串最大长度
NSInteger left = 0;//左边界
for (NSInteger i= 0;i<str.length;i++) {
NSString *indexStr = [str substringWithRange:NSMakeRange(i,1)];
if ([dict objectForKey:indexStr]) {
left = MAX(left,[[dict objectForKey:indexStr] integerValue]);
}
//比较前面的字符串长度 和 当前left~i的字符串c 长度哪个大
maxLength = MAX(maxLength,i-left);
[dict setObject:@(i) forKey:indexStr];
}
return maxLength;
}
测试:
NSInteger count = [NYStringVM noRepatStrCountForStr:@"abcdabcbb"];
NSLog(@"最长子串长度:%ld",count);
输出结果是:最长子串长度:4