2015-03-02 96 views
-2

給定一個字符串S我們如何檢查天氣,我們可以通過改變單個字母來將其轉換爲迴文。請幫助快速解決方案來做到這一點。檢查迴文是否可以形成

示例:讓我們有S =「mixem」。那麼答案是肯定的,因爲我們可以將「e」改爲「i」,使其成爲迴文。

長度的字符串最多可以爲1000。

+0

你試過的代碼在哪裏?你有沒有試圖實現它。你不是嗎? – nanndoj 2015-03-02 14:00:16

+0

@nanndoj是的,我有。但我想要一個可以在半秒內執行的代碼。我試圖改變每個字母在相反的一面..但它是非常不足 – user3840069 2015-03-02 14:02:55

+3

我不是你的downvoter。但這是一種「爲我而做」的問題,這是一個很有希望落後的候選人。我認爲最好的辦法是提供你的代碼,並在你想要改進的某個特定點上尋求幫助! – nanndoj 2015-03-02 14:06:40

回答

0

假設基於0的索引,就足夠了檢查,針對每個0 <= i < your_string_length,如果位置的數目爲其中在位置iyour_string_length - i - 1字符是不同的是至多2。如果是,則回答也是肯定的,否則不是。

基本上,這將檢查有多少對距字符串邊距相等的字符對是不同的:如果只有一對這樣的字符對不同,那麼我們可以改變它的一個字符並使其相等。如果更多對,那麼我們需要改變更多的字符。

0

如果我正確理解您的示例,這意味着您可以將單個字母更改爲任何其他字母。這使得算法變得令人尷尬地簡單。你需要從側面解析這個詞到中心,並計算錯誤的數量。如果它是< = 1,那麼你可以轉換成1個迴文迴文,或者它已經是迴文。

var s = "mixen", errors = 0; 
for(var i = 0; i < s.length/2; i++){ 
if(s[i] != s[s.length-1-i]){ 
    errors++; 
} 
var isPalindrom = errors == 0; 
var isPalindromConvertible = errors <= 1; 

PS。你沒有指定語言,所以我現在寫的最方便:javascript