iOS算法提升三(給定一個字符串,請找出不含有重複字符的最長子串長度)

題目:

要求:給定一個字符串,請找出不含有重複字符的最長子串長度

輸入:‘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,我會定期做一些技術分享!未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章