C_and_CPP 板


LINE

※ 引述《a106a106 (猜猜我4誰)》之銘言: 我想到一個做法 但是不曉得有沒有漏洞 思路跟找palindrome的方式類似 從任何兩個連續的character i, i+1 開始往兩邊出發 合法的情況會有 yxxy,xxxx:左右各前進一步 yxxx:左邊暫停,右邊前進一步 xxxy:左邊前進一步,右邊暫停 如果以上都不符合,嘗試下一個i 測試了幾個case有過,有甚麼地方錯的嗎 bool eliminate(string s) { int len = (int) s.length(); if (len <= 1) return len == 0; for (int i = 0; i < len - 1; i++) { if (s[i] != s[i + 1]) continue; int j = i, k = i + 1; while (j >= 1 && k < len - 1) { if (s[j - 1] == s[k + 1]) { j--; k++; } while (j >= 1 && s[j] == s[j - 1]) j--; while (k < len - 1 && s[k] == s[k + 1]) k++; } if ((j < 0 || eliminate(s.substr(0, j))) && (k >= len || eliminate(s.substr(k + 1)) || eliminate(s.substr(k)))) return true; } return false; } 感謝推文指出錯誤 後來想了一下 yxxyxxy失敗的原因 yxxy處理完後xxy被當成無效的字串 但是yxxy的最後一個y其實可以和xxy合在一起 只要我們確定 [...]xxy 括弧裡面是可以完全消除的字串 另外也想了用DP該如何解 思路大概是這樣 vector<int> dp(s.length(), 0); for (int i = 1; i < s.length(); i++) { if (i - dp[i - 1] - 1 >= 0 && s[i - dp[i - 1] - 1] == s[i]) { dp[i] = dp[i - 1] + 2; dp[i] += ((i - dp[i - 1] - 2 >= 0) ? dp[i - dp[i - 1] - 2] : 0); } } 以yxxyxxy來作為例子 s=yxxyxxy dp=0024060 會發現這樣做不能處理最後一個y和第一個y結合的情況 還要再想一下怎麼做 目的是希望 dp[s.length()-1]==s.length() 來證明是可以完全消除的字串 : 題目:隨機給定一字串,判斷此字串最後能不能變成空字串 : 列出了很多組字串思考,原本是想找有aba或bab單獨存在的字串,但後來發現無論如何都會 : 有例外,一直找不到可以直接判斷的方法,想請問有沒有大大對這題有任何想法可以一起討 : 論,我想了好幾天都想不出來... : 謝謝大家QQQ : -- :



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.242.102.238
: ※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1537509661.A.BCF.html : ※ 編輯: a106a106 (27.242.102.238), 09/21/2018 14:05:06 : ※ 編輯: a106a106 (27.242.102.238), 09/21/2018 14:08:32 : → MOONRAKER: 就一直跑看會不會變空字串不就好了 09/21 14:17 : 推 s4300026: 我的想法是存入vector,用for,如果iter值跟下一個相同 09/21 14:48 : → s4300026: ,就再檢查下一個,直至不相同,然後刪除中間區塊,iter 09/21 14:48 : → s4300026: --,iter到底後檢查vector是否為空,結案。 值得思考的 09/21 14:48 : → s4300026: 是,有沒有特解是要先消後面一組的,而不能用貪心法解。 09/21 14:48 : → s4300026: 當我沒說,哈哈,你的例子,我的方法就無用了 09/21 14:49 : → sarafciel: 樓上的作法感覺先做一遍reverse後可以解? 09/21 15:10 : 推 a21802: 但是這個你的這個規律會因為消的順序不同有不同結果 09/21 17:03 : 推 cphe: 它應該就是只要找到一個順序可以全消就算吧 09/21 17:23 : → sarafciel: 樓樓上一講我才發現原PO給的例子好像兩個xx位移了XD 09/21 17:35 : → a106a106: 的確是,只要找到可以消完的方法就算可以,而消字串的 09/21 18:30 : → a106a106: 順序不需固定 09/21 18:30 : 目前有關於線性串列的想法,如果把xyxxxyyx轉成陣列{1, 1, 3, 2, 1}的表示,如果把中 : 間3個x刪掉後就變成{1, (1+2), 1},再刪掉3個y變成{2},即可成為空字串。 : 問題是消除的順序有很多種可能,目前我找不到完美的公式可以解決的 : ※ 編輯: a106a106 (27.242.102.238), 09/21/2018 18:36:09 : 推 s4300026: 那我想到第二種做法,Y取代yy,Y左右都是x,則x均取代 09/21 18:51 : → s4300026: 成X,直至無法取代,檢查無小寫字就過關。 09/21 18:51 : → s4300026: Y左右檢查不受大寫字影響 09/21 18:52 : 推 s4300026: 話說這應該去prob_solve 09/21 18:55 : 推 LPH66: 樓上一樣, 決定取代的順序會有差 09/21 19:51 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.140.223
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1537533041.A.319.html
1F:→ idiont: yxxyxxy 09/22 03:22
2F:→ gofigure: 嗯 while那邊應該可以改一下處理邊界問題 09/22 07:47
※ 編輯: gofigure (111.240.84.199), 09/23/2018 11:45:30
3F:推 LPH66: 你的 DP 只會 +2 所以不會在 yxxyxxy 裡得到 7 09/23 15:34
4F:→ LPH66: 我沒試跑, 不過以這樣看起來可能 yyy 也不會過 09/23 15:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP