華為OD機(jī)試-- 最長(zhǎng)子字符串的長(zhǎng)度

題目
給你一個(gè)字符串 s,字符串s首尾相連成一個(gè)環(huán)形 ,請(qǐng)你在環(huán)中找出 ‘o’ 字符出現(xiàn)了偶數(shù)次最長(zhǎng)子字符串的長(zhǎng)度。
輸入描述
輸入是一串小寫字母組成的字符串
輸出描述
輸出是一個(gè)整數(shù)
示例1 輸入輸出示例僅供調(diào)試,后臺(tái)判題數(shù)據(jù)一般不包含示例
輸入
alolobo
輸出
6
說(shuō)明
最長(zhǎng)子字符串之一是 “alolob”,它包含’o’ 2個(gè)。
示例2 輸入輸出示例僅供調(diào)試,后臺(tái)判題數(shù)據(jù)一般不包含示例
輸入
looxdolx
輸出
7
說(shuō)明
最長(zhǎng)子字符串是 “oxdolxl”,由于是首尾連接在一起的,所以最后一個(gè) ‘x’ 和開(kāi)頭的 ‘l’是連接在一起的,此字符串包含 2 個(gè)’o’ 。
示例3 輸入輸出示例僅供調(diào)試,后臺(tái)判題數(shù)據(jù)一般不包含示例
輸入
bcbcbc
輸出
6
說(shuō)明
這個(gè)示例中,字符串 “bcbcbc” 本身就是最長(zhǎng)的,因?yàn)?‘o’ 都出現(xiàn)了 0 次。
備注:
1 <= s.length <= 5 x 10^5
s 只包含小寫英文字母。
思路
1:要找出最長(zhǎng)的包含 o 偶數(shù)次的子串,那么兩個(gè)核心點(diǎn),第一、偶數(shù)次。第二、包含o字符。
2:注意是一個(gè)環(huán)形的字符串,那么起點(diǎn)從哪里開(kāi)始都行,如果o的出現(xiàn)次數(shù)為奇數(shù),那么我們直接以其中一個(gè) o 的下一個(gè)字符為起點(diǎn),那這樣剩下的字符串滿足兩個(gè)條件,o 出現(xiàn)偶數(shù)次、且最長(zhǎng)。如果出現(xiàn)偶數(shù)次,那么整個(gè)字符串的長(zhǎng)度就是結(jié)果。
Java 實(shí)現(xiàn):https://renjie.blog.csdn.net/article/details/130894025
Python實(shí)現(xiàn):https://renjie.blog.csdn.net/article/details/128356550
C++ 實(shí)現(xiàn):https://renjie.blog.csdn.net/article/details/127152617
JavaScript實(shí)現(xiàn):https://renjie.blog.csdn.net/article/details/130894012
C實(shí)現(xiàn):https://renjie.blog.csdn.net/article/details/129190260