面試題17 13 恢復空格

2021-10-07 22:18:40 字數 896 閱讀 4259

刷題主頁

一看就是給定字串和字典,檢視是否匹配類的問題,因此直接考慮動態規劃,dp[i]表示前i個字元未識別的字元最少數,那麼當s[j-1:i)在字典中時,dp[i]=min(dp[i],dp[j-1]),否則dp[i]=dp[i-1]+1;整體和單詞拆分類似,雙重迴圈+判斷即可。

class

solution}}

return dp[len];}

};

同樣,這種方式造成了重複計算,當以某字尾為字串不存在字典中時,那麼以該字尾為字串的應該都不在字典中,這種情況應該跳過。如dic=,vec=,像這種vec中的字串都無法匹配字典,因為它們的字尾是』c』,而該字元不在字典中。使用字典樹跳過這種情況,**如下:

class

trie_node

;bool isend;

trie_node()

void

insert

(const string& s)

curpos=curpos-

>next[pos];}

curpos-

>isend=

true;}

};class

solution

vector<

int>

dp(len+1,

0);for

(int i=

1;i<=len;

++i)

else

if(curpos-

>next[pos]

->isend)

curpos=curpos-

>next[pos];}

}return dp[len];}

};

面試題 17 13 恢復空格

哦,不!你不小心把乙個長篇文章中的空格 標點都刪掉了,並且大寫也弄成了小寫。像句子 i reset the computer.it still didn t boot 已經變成了 iresetthecomputeritstilldidntboot 在處理標點符號和大小寫之前,你得先把它斷成詞語。當然...

面試題 17 13 恢復空格

哦,不!你不小心把乙個長篇文章中的空格 標點都刪掉了,並且大寫也弄成了小寫。像句子 i reset the computer.it still didn t boot 已經變成了 iresetthecomputeritstilldidntboot 在處理標點符號和大小寫之前,你得先把它斷成詞語。當然...

面試題 17 13 恢復空格

題目描述 哦,不!你不小心把乙個長篇文章中的空格 標點都刪掉了,並且大寫也弄成了小寫。像句子 i reset the computer.it still didn t boot 已經變成了 iresetthecomputeritstilldidntboot 在處理標點符號和大小寫之前,你得先把它斷成...