題目:
給定一串字元,裡面有些字元有連續出現的特點,請尋找這些連續出現字元中最長的串,
如果最長的串有多個,請輸出字元ascii碼最小的那一串。
例如:輸入aaabbbbbcccccccczzzzzzzz,輸出cccccccc。
思路:採用反向遍歷的思路
def
maxrepeatstr
(arr):if
not arr:
return arr
# 去重後的每個元素的重複字串可能的最大長度
len_up_border =
len(arr)
-len
(set
(arr))+
1# 快取遍歷,最大長度和當前元素(分別初始化為1和最大ascii碼對應的字元)
max_len =
1 cur_element =
chr(
127)
# res[max_len] = min_ascii_element_with_max_length
res =
# 長度反向遍歷的跳出標識
flag =
false
for i in
range
(len_up_border,0,
-1):
for s in
set(arr)
: spt = s * i
# 以 spt 分割原始字串作為判斷依據:如果spt在arr中存在,則分割後長度》1; 若不存在,分割後長度=1
splited = arr.split(spt)
iflen
(splited)
>1:
# print('i-->', i, 's-->', s, 'splited-->', splited)
max_len =
max(max_len, i)
cur_element =
min(cur_element, s)
res[i]
= cur_element
flag =
true
if flag:
break
output =
[v * k for k, v in res.items()]
return output[
0]
測試結果:
arr =
'aaaaaaaaaaaaaasdffdiiiiiiiiiiiiii--------------558/**'
# print('--->', arr.split('aaaaaaaaaaaaaa'), len(arr.split('aaaaaaaaaaaaaa')))
res = maxrepeatstr(arr)
print
(res)
無重複字元的最長子串 python
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3 ...
Python 無重複字元的最長子串
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。輸入 pwwkew 輸出 3 解釋 因為無重複字元的最長子串...
03 無重複字元的最長子串 python
給定乙個字串,找出不含有重複字元的最長子串的長度。輸入 abcabcbb 輸出 3 解釋 無重複字元的最長子串是 abc 其長度為 3。示例 2 輸入 bbbbb 輸出 1 解釋 無重複字元的最長子串是 b 其長度為 1。示例 3 輸入 pwwkew 輸出 3 解釋 無重複字元的最長子串是 wke ...