下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第JavaC++算法leetcode828統(tǒng)計子串中唯一字符乘法原理目錄題目要求思路:模擬javaC++Rust
題目要求
思路:模擬
解題的核心思想在于逆向思維,不考慮每個子數(shù)組中的唯一字符個數(shù),轉(zhuǎn)而考慮每個字符可以作為多少個子數(shù)組的唯一字符;
所以在計算答案時的算式和示例中給出的是不一樣的;在計算每個字符貢獻(xiàn)【即當(dāng)前向左向右分別可組成的答案個數(shù)】的時候要用到乘法原理。
對每一個字符s[i]s[i]s[i]都記錄其左邊和右邊的第一個相同字符位置,分別記為l[i]l[i]l[i]和r[i]r[i]r[i],這兩個位置中間構(gòu)成的就是s[i]s[i]s[i]能夠作為唯一字符的最長子串,在這個最長的子串中還有若干個較短的子串,此時s[i]s[i]s[i]的貢獻(xiàn)可由到左邊和到右邊的距離相乘計算得出。
java
classSolution{
publicintuniqueLetterString(Strings){
char[]cs=s.toCharArray();
intn=cs.length,res=0;
int[]l=newint[n],r=newint[n];
int[]letters=newint[26];
Arrays.fill(letters,-1);
for(inti=0;ii++){
intidx=cs[i]-'A';
l[i]=letters[idx];//左邊第一個相同的字符所在位置
letters[idx]=i;//更新當(dāng)前字母最新左位置
Arrays.fill(letters,n);
for(inti=n-1;ii--){
intidx=cs[i]-'A';
r[i]=letters[idx];//右邊第一個相同的字符所在位置
letters[idx]=i;//更新當(dāng)前字母最新右位置
for(inti=0;ii++)
res+=(i-l[i])*(r[i]-i);
returnres;
時間復(fù)雜度:O(n)空間復(fù)雜度:O(n)
C++
因為memset初始化問題,所以在構(gòu)成結(jié)果的時候多一步判斷。
classSolution{
public:
intuniqueLetterString(strings){
intn=s.size(),res=0;
coutnendl;
intl[n],r[n];
intletters[26];
memset(letters,-1,sizeof(letters));
for(inti=0;ii++){
intidx=s[i]-'A';
l[i]=letters[idx];//左邊第一個相同的字符所在位置
letters[idx]=i;//更新當(dāng)前字母最新左位置
memset(letters,-1,sizeof(letters));
for(inti=n-1;ii--){
intidx=s[i]-'A';
r[i]=letters[idx];//右邊第一個相同的字符所在位置
letters[idx]=i;//更新當(dāng)前字母最新右位置
for(inti=0;ii++){
intri=r[i]==-1n:r[i];
res+=(i-l[i])*(ri-i);
returnres;
時間復(fù)雜度:O(n)空間復(fù)雜度:O(n)
Rust
用Rust的遍歷稍微改一下,思路一樣
implSolution{
pubfnunique_letter_string(s:String)-i32{
letcs=s.as_bytes();
(0..s.len()).into_iter().map(|i|{
let(mutl,mutr)=(i-1,i+1);
whilels.len()cs[l]!=cs[i]{
l-=1;
whilers.len()cs[r]!=cs[i]{
r+=1;
((i-l)*(r-i))asi32
}).sum::i32()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 22200.3-2025低壓電器可靠性第3部分:過載繼電器可靠性試驗方法
- 江西省萍鄉(xiāng)市2024-2025學(xué)年高二上學(xué)期期末考試物理試卷(含答案)
- 廣東省廣州市白云區(qū)2025-2026學(xué)年八年級上學(xué)期期末考試英語試題(含答案無聽力音頻及原文)
- 五年級期末考試卷及答案
- 微生物學(xué)試題及答案
- 北京航空航天大學(xué)《德國文學(xué)選讀》2024 - 2025 學(xué)年第一學(xué)期期末試卷
- 2025 四年級科學(xué)上冊小學(xué)科學(xué)上冊綜合復(fù)習(xí)課件
- 2021年湖南歷史高考一分一段位次表出爐
- 2023年人教版一年級語文下冊期中試卷(及參考答案)
- 南通事業(yè)單位招聘2022年考試全真模擬試題4套及答案解析(附后)
- 商超信息系統(tǒng)操作規(guī)定
- 如何做好一名護理帶教老師
- 房地產(chǎn)項目回款策略與現(xiàn)金流管理
- 非連續(xù)性文本閱讀(中考試題20篇)-2024年中考語文重難點復(fù)習(xí)攻略(解析版)
- 畜禽糞污資源化利用培訓(xùn)
- 《搶救藥物知識》課件
- 建筑工程咨詢服務(wù)合同(標(biāo)準(zhǔn)版)
- 2024年4月自考05424現(xiàn)代設(shè)計史試題
- 綜合能源管理系統(tǒng)平臺方案設(shè)計及實施合集
- 甲苯磺酸奧馬環(huán)素片-藥品臨床應(yīng)用解讀
- 共享單車對城市交通的影響研究
評論
0/150
提交評論