題目:Z 字形變換java
描述:將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。git
好比輸入字符串爲 "LEETCODEISHIRING" 行數爲 3 時,排列以下:github
L C I R E T O E S I I G E D H N
以後,你的輸出須要從左往右逐行讀取,產生出一個新的字符串,好比:"LCIRETOESIIGEDHN"。正則表達式
請你實現這個將字符串進行指定行數變換的函數:
string convert(string s, int numRows);
app
示例 1:函數
示例 2:學習
L D R E O E I I E C I H N T S G
這個題目只須要找好規律,就能夠很快解決了。若是記 m=numRows-1,從縱向來看,第一列對應原串的下標就是 0, 1, 2,..., m,例如示例2的LEET四個字符對應的下標就是0, 1, 2, 3。以後的斜線上字符的下標爲 m+1, m+2,..., 2m,例如示例2的COD下標就是4, 5, 6。從橫向來看,第一行包含0, 2m, 4m,...等元素,最後一行包含m, 3m, 5m,...等元素,而其他行例如第二行則還包含一個2m-1, 4m-1,...的值。ui
掌握了以上規律,咱們就能夠快速解決此問題,參考代碼以下:code
public String convert(String s, int numRows) { int len = s.length(); if (len == 0 || numRows < 2) return s; int m = numRows - 1; StringBuilder sb = new StringBuilder(); for (int i = 0; i <= m; i++) { for (int j = 0; j < len + m; j += 2 * m) { if (i != 0 && i != m) { if (j >= i && j - i < len) { sb.append(s.charAt(j - i)); } } if (j + i < len) { sb.append(s.charAt(j + i)); } } } return sb.toString(); }
LeetCode上還有相似於此題的簡單題目,接下來的幾個題也是對細緻的考察,這裏就略過了,感興趣的話能夠到個人github上查看代碼。接下來的題目較爲有挑戰性,咱們一塊兒來試試吧。blog
題目:正則表達式匹配
描述:給定一個字符串 (s) 和一個字符模式 (p)。實現支持 '.' 和 '*' 的正則表達式匹配。
匹配應該覆蓋整個字符串 (s) ,而不是部分字符串。
說明:
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
相關源碼請加QQ獲取。
【感謝您能看完,若是可以幫到您,麻煩點個贊~】
更多經驗技術歡迎前來共同窗習交流: 一點課堂-爲夢想而奮鬥的在線學習平臺 http://www.yidiankt.com/
![關注公衆號,回覆「1」免費領取-【java核心知識點】]
QQ討論羣:616683098
QQ:3184402434
想要深刻學習的同窗們能夠加我QQ一塊兒學習討論~還有全套資源分享,經驗探討,等你哦!