我是靠谱客的博主 苹果缘分,这篇文章主要介绍Python实现字符串的Z 字形变换,现在分享给大家,希望可以做个参考。

题目描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
LeetCode原题地址:https://leetcode-cn.com/problems/zigzag-conversion/

测试用例

比如输入字符串为"LEETCODEISHIRING" 行数为 3 时,排列如下:

L C I R
E T O E S I I G
E D H N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:

“LCIRETOESIIGEDHN”。

请你实现这个将字符串进行指定行数变换的函数:

  • 示例1

输入: s = “LEETCODEISHIRING”, numRows = 3
输出: “LCIRETOESIIGEDHN”

  • 示例2

输入: s = “LEETCODEISHIRING”, numRows = 4
输出: “LDREOEIIECIHNTSG”
解释:
L D R
E O E I I
E C I H N
T S G

代码实现

  • 按行排序
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object): def convert(self,s,numRows): if numRows < 2: return s #用来存放Z字变换的字符串 list_rows = ["" for _ in range(min(len(s),numRows))] #用来记录方向 is_down = False #用来记录当前字符更新的行 current_row = 0 for s_c in s: #更新存放变换后的列表 list_rows[current_row] += s_c if current_row == 0: is_down = True elif current_row == numRows - 1: is_down = False #计算下一次更新变换列表的位置 current_row += 1 if is_down else -1 #返回最后变换后的字符串 return "".join(list_rows)
  • 归纳统计
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution(object): """ L D R E O E I I E C I H N T S G 归纳总结,统计出变换后的每行字符串在原字符串的位置 其中k代表的是某一行的字符个数,rows代表总的行数 原字符串满足第一行的公式:k(rows-1)*2 原字符串满足中间行的公式:k(rows-1)*2 + i和(k+1)(rows-1)*2 - i 原字符串满足最后一行的公式:k(rows-1)*2 + rows - 1 注:其实第一行和最后一行的公式都可以统一为,k(rows-1)*2 + i """ def convert(self,s,numRows): if numRows < 2: return s s_size = len(s) #每个循环的长度 cycle_len = (numRows - 1) * 2 #用来记录拼接后的字符串 ret = "" #遍历每行 for i in range(numRows): for j in range(0,s_size-i,cycle_len): ret += s[j+i] #如果是中间行的时候,会多一种情况 if i != 0 and i != numRows - 1 and j + cycle_len - i < s_size: ret += s[j + cycle_len - i] return ret

参考:

  1. LeetCode详细题解

最后

以上就是苹果缘分最近收集整理的关于Python实现字符串的Z 字形变换的全部内容,更多相关Python实现字符串的Z内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(92)

评论列表共有 0 条评论

立即
投稿
返回
顶部