刷題主頁
一看就是給定字串和字典,檢視是否匹配類的問題,因此直接考慮動態規劃,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 在處理標點符號和大小寫之前,你得先把它斷成...