題目:
要求:給定一個字符串,請找出不含有重複字符的最長子串長度
輸入:‘abcabcbb’
輸出:3
解釋:因爲無重複字符的最長子串是abc,所以長度爲3
輸入:‘bbbbbbb’
輸出:“1”
輸入:”pwwkew“
輸出:3
解釋:因爲無重複的字符的最長子串是wke,所以長度爲3,請注意,你的答案必須是子串中的長度,‘pwke’是一個子序列,不是子串;
/**
思路:
將字符中的每個元素放入數組中,如果已經包含就移除字符之前的所有元素,,記錄數組的count值並取最大
**/
void function1(NSString *str)
{
NSMutableArray *arr = [NSMutableArray array];
int max = 0;
for (int i = 0; i < str.length; i++) {
//獲取當前位置字符串
NSString *s = [str substringWithRange:NSMakeRange(i, 1)];
//判斷數組中是否包含當前字符串
if ([arr containsObject:s]) {
//數組中包含字符串,或取出字符的位置
int index = [arr indexOfObject:s];
//移除當前字符之前的所有元素
[arr removeObjectsInRange:NSMakeRange(0, index+1)];
}else{
//如果字符不包含,就添加進入數組
[arr addObject:s];
}
//當前的max和數組的count那個值大就取出那個值
max = max > arr.count ? max : arr.count;
}
NSLog(@"max--%d",max);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
// NSString *str = @"abcabcbb";
NSString *str = @"pwwkew";
CFAbsoluteTime StartTime1 = CFAbsoluteTimeGetCurrent();
function1(str);
CFAbsoluteTime EndTime1 = CFAbsoluteTimeGetCurrent();
NSLog(@"function2執行時間爲:----%f",EndTime1 - StartTime1);
}
return 0;
}
總結:
作爲iOS開發,其中使用的是iOS中語法,請大家見諒,這個算法不是最優解,只是小編的解法,能夠完成這個,大家可以一起討論學習;有興趣可以在git中下載demo,也可以試試自己寫出更好的算法
希望對大家有用處,歡迎大家點贊+評論,關注我的CSDN,我會定期做一些技術分享!未完待續。。。