題目描述:
已知乙個長度為n的字串,只由0和1組成, 求乙個最長的子串,要求該子串出0和1出現的次數相等。
要求演算法時間複雜度盡可能的低。
比如:1000010111000001,加粗的部分10
思路:(1) 最簡單的想法就是遍歷所有的子串,之後判斷該子串是否滿足條件
n^2子串,每個子串掃一遍判斷0、1是否出現的次數相等,複雜度為o(n^3)
稍加思考就會發現, 如果乙個長度為n的子串滿足條件,加麼這n個元素的和 加起來一定=(n/2)
這樣在迴圈的過程中,增量加就可以了,不需要每個子串從頭計算,複雜度降為o(n^2);
int maxlen =
0, sum =
0, currlen =
0; for(
int i =
0; i < n; ++i) }
(2) 還有沒有辦法進一步降低演算法的複雜度呢?
遇到0:-1 遇到1:+1 sum:-n~n 提公升n, 0~2n
個數相等,則字首和為0。對字首和進行排序,最大減去最小
雜湊代替排序,
統計乙個01字串中0,1連續出現的最大次數
比如 0011000111 則表示0最大出現3次,1最大出現3次。程式的思路很巧妙,不複雜。demo.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std static void strwe char str static vo...
字串中第乙個只出現一次的字元
在字串中找出第乙個只出現一次的字元。如輸入 abaccdeff 則輸出b。如果字串中不存在只出現一次的字元,返回 字元。樣例 輸入 abaccdeff 輸出 b 思路 用乙個hashmap key是每個字母 value是出現的次數,第一次用for迴圈將字串每個字元錄到雜湊map裡,如果有重複的就把v...
找字串中最後乙個只出現一次的字元
找字串中最後乙個只出現一次的字元 題目描述 給定乙個只包含小寫字母的字串,請你找到最後乙個僅出現一次的字元。輸入格式 乙個字串,長度小於 100000。輸出格式 輸出最後乙個僅出現一次的字元,若沒有則輸出 no。輸入樣例 abcabd 輸出樣例 d這道題難瓜剛開始還不會做,結果我的好朋友提醒我就會了...