牛客网 面试必刷TOP101 算法题

介绍

发现一个除了Leecode以外比较好的刷算法的网站:

牛客网在线编程_算法篇_面试必刷TOP101 (nowcoder.com)

据说是收集了很多面试题精选的题目

题目例子

BM83 字符串变形

描述

对于一个长度为 n 字符串,我们需要对它做一些变形。

首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。

比如"Hello World"变形后就变成了"wORLD hELLO"。

数据范围: 1≤n≤1061≤n≤106 , 字符串中包括大写英文字母、小写英文字母、空格。

进阶:空间复杂度 O(n) , 时间复杂度 O(n)

输入描述:

给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)

返回值描述:

请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。

示例1

输入:
"This is a sample",16

返回值:
"SAMPLE A IS tHIS"

Python实现

参考了答案,我的代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def trans(self, s: str, n: int) -> str:
word_list = list(s.split(" "))[::-1]
new_str = " ".join(word_list)
res = ""
for i in range(n):
if new_str[i] <= "Z" and new_str[i] >= "A":
res += chr(ord(new_str[i]) - ord("A") + ord("a"))
elif new_str[i] <= "z" and new_str[i] >= "a":
res += chr(ord(new_str[i]) - ord("a") + ord("A"))
else:
res += new_str[i]
print(res)
return res

其中以下写法值得借鉴:

  1. 倒序的实现为 list(s.split(" "))[::-1]
  2. 字母变为小写:chr(ord(new_str[i]) - ord(“A”) + ord(“a”))
  3. 另外 用 swapcase() 函数更简洁

界面和操作

界面如下:

操作还比较方便,有语法提示,有调试界面。

请我喝杯咖啡吧~

支付宝
微信