2075. 解码斜向换位密码
2075. 解碼斜向換位密碼
字符串 originalText 使用 斜向換位密碼 ,經(jīng)由 行數(shù)固定 為 rows 的矩陣輔助,加密得到一個字符串 encodedText 。
originalText 先按從左上到右下的方式放置到矩陣中。
先填充藍(lán)色單元格,接著是紅色單元格,然后是黃色單元格,以此類推,直到到達(dá) originalText 末尾。箭頭指示順序即為單元格填充順序。所有空單元格用 ’ ’ 進行填充。矩陣的列數(shù)需滿足:用 originalText 填充之后,最右側(cè)列 不為空 。
接著按行將字符附加到矩陣中,構(gòu)造 encodedText 。
先把藍(lán)色單元格中的字符附加到 encodedText 中,接著是紅色單元格,最后是黃色單元格。箭頭指示單元格訪問順序。
例如,如果 originalText = “cipher” 且 rows = 3 ,那么我們可以按下述方法將其編碼:
藍(lán)色箭頭標(biāo)識 originalText 是如何放入矩陣中的,紅色箭頭標(biāo)識形成 encodedText 的順序。在上述例子中,encodedText = “ch ie pr” 。
給你編碼后的字符串 encodedText 和矩陣的行數(shù) rows ,返回源字符串 originalText 。
注意:originalText 不 含任何尾隨空格 ’ ’ 。生成的測試用例滿足 僅存在一個 可能的 originalText 。
- 示例 1:
輸入:encodedText = “ch ie pr”, rows = 3
輸出:“cipher”
解釋:此示例與問題描述中的例子相同。
- 示例 2:
輸入:encodedText = “iveo eed l te olc”, rows = 4
輸出:“i love leetcode”
解釋:上圖標(biāo)識用于編碼 originalText 的矩陣。
藍(lán)色箭頭展示如何從 encodedText 找到 originalText 。
- 示例 3:
輸入:encodedText = “coding”, rows = 1
輸出:“coding”
解釋:由于只有 1 行,所以 originalText 和 encodedText 是相同的。
- 示例 4:
輸入:encodedText = " b ac", rows = 2
輸出:" abc"
解釋:originalText 不能含尾隨空格,但它可能會有一個或者多個前置空格。
提示:
- 0 <= encodedText.length <= 10610^6106
- encodedText 僅由小寫英文字母和 ’ ’ 組成
- encodedText 是對某個 不含 尾隨空格的 originalText 的一個有效編碼
- 1 <= rows <= 1000
- 生成的測試用例滿足 僅存在一個 可能的 originalText
解題思路
代碼
class Solution { public:string decodeCiphertext(string encodedText, int rows) {if(rows==1) return encodedText;int col=encodedText.size()/rows;string res("");int x=0,y=0;while (x<rows&&y<col){int cx=x,cy=y;for (int i = 0; cx<rows&&cy<col ; ++i) {res+=encodedText[cy+cx*col];cx++;cy++;}y++;}int i = res.size()-1;for (; i >=0 ; --i) {if (res[i]!=' ')break;}return res.substr(0,i+1);} };總結(jié)
以上是生活随笔為你收集整理的2075. 解码斜向换位密码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么做梦梦到密集恐惧症
- 下一篇: 391. 完美矩形