题目: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一块儿学习讨论~还有全套资源分享,经验探讨,等你哦!