LeetCode,字符串1

1. 344_反转字符串

题目来源:力扣

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例1,
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例2,
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

使用库函数,代码如下,

class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """
        s.reverse()
        return s

2. 541_反转字符串II

题目来源:力扣

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例1,
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例2,
输入:s = "abcd", k = 2
输出:"bacd"

结题思路如下,

 图1. 翻转字符串示例

代码,

class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        r = ""
        # 标记当前的索引为奇数k倍,还是偶数k被
        tag = 0
        i_left = tag * k
        i_right = (tag + 1) * k
        while i_left < len(s):
            # 注意,这里的[ )为左开右闭,因此当i_right == len-1时,不能使用else
            if i_right <= len(s)-1:
                tmp_r = list(s[i_left: i_right])
            else:
                tmp_r = list(s[i_left:])
            # 当tag是o偶数k倍,比如0时,翻转,插入结果
            if tag % 2 == 0:
                tmp_r.reverse()
            r += "".join(tmp_r)

            tag += 1
            i_left = tag * k
            i_right = (tag + 1) * k

        return r

if __name__ == '__main__':
    sol = Solution()
    s = "abcdefg"
    k = 3
    r = sol.reverseStr(s, k)
    print(r)

3. 151_颠倒字符串中的单词

题目来源:力扣

给你一个字符串 s ,颠倒字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

代码思路:

(1)从非空的字符串开始;

(2)将连续的字符存入列表;

(3)遇到连续空格不做。

最后将列表反转,使用" ".joint(lst.reverse())。代码如下,

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        r = []
        i = 0
        # 先吞空格
        while i <= len(s) - 1 and s[i] == " ":
            i += 1
        while i <= len(s)-1:
            st = ""
            while i <= len(s)-1 and s[i] != " ":
                st += s[i]
                i += 1
            r.append(st)
            while i <= len(s)-1 and s[i] == " ":
                i += 1
        r.reverse()
        r = " ".join(r)

        return r

if __name__ == '__main__':
    sol = Solution()
    s = "asdasd df f"
    r = sol.reverseWords(s)
    print(r)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值