首页 > 试题广场 >

字符串变形

[编程题]字符串变形
  • 热度指数:163112 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
对于一个长度为 n 字符串,我们需要对它做一些变形。

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

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

数据范围: , 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度 , 时间复杂度

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


输出描述:
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
示例1

输入

"This is a sample",16

输出

"SAMPLE A IS tHIS"
示例2

输入

"nowcoder",8

输出

"NOWCODER"
示例3

输入

"iOS",3

输出

"Ios"
头像 牛客题解官
发表于 2022-04-22 12:56:19
精华题解 题目主要信息: 将字符串大小写反转 将整个字符串的所有单词位置反转 举一反三: 学会了本题的思路,你将可以解决类似的字符串问题: BM84. 最长公共前缀 BM85. 验证IP地址 方法一:双逆转(推荐使用) 思路: 将单词位置的反转,那肯定前后都是逆序,不如我们先将整个字符串反转,这样是不是单 展开全文
头像 changed.
发表于 2021-07-18 12:41:03
精华题解 方法一:栈 核心思想: 题目要求将单词逆序输出,很容易想到一个思路就是利用栈的先入后出特性。 解法:首先读取单词,以空格为分界符(在字符串最后加上一个空格避免特判),读取的同时进行大小写转换,然后将单词加入到栈中。在全部单词读取完毕后,逐个弹出单词,即为答案 图示: 之后从栈顶逐个弹出即为答案 核 展开全文
头像 不会做题的小菜鸡
发表于 2021-07-18 18:17:29
精华题解 思路 python利用split函数分隔单词成列表,倒置列表后改变大小写,最终串成一个最终的字符串 双指针来取单词前后位置 方法一:借助list 用split函数分隔成单词列表,倒置的方法很好写 class Solution: def trans(self, s, n): 展开全文
头像 加油做题
发表于 2022-06-09 16:29:15
先把整个字符串翻转 在按照空格分段,改变大小写,部分反转 //翻转函数 void reverse(char* s,int head,int tail){ char temp; while(head<tail){ temp=s[head]; s[ 展开全文
头像 超级码力233
发表于 2020-11-26 17:25:33
字符串变形 题目链接 Solution 将字符串按单词反转,并反转大小写。从后往前扫,如果遇到空格,说明从这个空格的位置到下一个空格之间是一个单词。然后将单词的每个字母依次取出,取出的过程变化大小写。 Code class Transform { public: char trans(cha 展开全文
头像 专注事业和宝宝
发表于 2022-03-09 15:40:56
思路: 单独写一个方法用于大小写相互转换; 将字符串S以" "为分隔符,分割为一个数组;将数组以倒序的方式重新组合成字符串; 注意: 字符串分隔:s.split(" ",-1),以空格为分隔符, 数组转换为字符串,注意空格的处理。 其他: 大小写转换:Character.toUpperCa 展开全文
头像 已注销
发表于 2021-10-21 23:27:49
遇到空格,我们通过split拆分单词,然后步长为-1,逆转列表。然后遍历单词,通过swaocase自动调节大小写变形。最后,再组成字符串。这里注意,最后返回结果会多一个空格,所以最后需要索引输出[:len(s)-1]. class Solution: def trans(self, s, 展开全文
头像 可可弟弟
发表于 2019-08-21 15:21:43
第一步先翻转单词顺序,之前看到的有个巧妙的思路,先对整个字符串进行翻转,然后循 环对每个单词进行翻转,就达到了翻转单词顺序的效果,这个时间复杂度为:因为中间有个while循环,最多循环单词的最大长度,单词长度是常数级别的,所以时间复杂度为o(n)的, 第二步遍历字符串,将每个大写变成小写,小写 展开全文
头像 牛客432959891号
发表于 2022-08-06 04:56:44
class Solution:     def trans(self , s: str, n: int) -> str:    &nb 展开全文
头像 努力成为别人眼中的天才
发表于 2021-01-13 11:22:23
方法一:ss存改变后的总字符串将字符大小写反转后添加到str中,遇到空格则把str添加到ss的中,然后把str清空最后ss添加剩余的str的字符串并返回 public String trans(String s, int n) { StringBuffer ss=new String 展开全文
头像 牛客995030854号
发表于 2022-04-25 21:47:13
function trans(s, n){ //write code here const arr = s.split(' ').map((item)=>{ let word = item.split(''); for(let i=0;i<word 展开全文
头像 凯里欧羊
发表于 2022-05-14 11:46:28
主要思想: 利用split切割为String数组 String数组从后往前遍历,拿到具体的String从0到str.length()遍历,并判断大小写然后转换 需要注意的地方就是s.split(" ",-1),limit需要设置为-1来不舍弃最后的空串 import java.util.*; 展开全文
头像 梦会绽放
发表于 2022-02-09 21:05:37
思路: 不使用语言中的 API,而是自己编写对应的函数。 将字母大小写转换后,反转整个字符串,再反转每个单词。 注意JAVA的字符串不可变,对于字符串不可变的语言,首先得把字符串转化成其他可变的数据结构.。 注意下标不要越界。 复杂度: 时间复杂度 O(n) ,需要 O(n) 的空间来存储字符串 展开全文

问题信息

难度:
307条回答 20203浏览

热门推荐

通过挑战的用户

查看代码
字符串变形