乙個01字串,求出現0 1出現次數相等的最長子串

2021-07-03 02:35:58 字數 599 閱讀 9955

題目描述:

已知乙個長度為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這道題難瓜剛開始還不會做,結果我的好朋友提醒我就會了...