我是靠谱客的博主 苹果缘分,最近开发中收集的这篇文章主要介绍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

代码实现

  • 按行排序
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)
  • 归纳统计
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 字形变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部