对于一个长度为 n 字符串,我们需要对它做一些变形。
首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。
比如"Hello World"变形后就变成了"wORLD hELLO"。
数据范围:
, 字符串中包括大写英文字母、小写英文字母、空格。
进阶:空间复杂度
, 时间复杂度
给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
"This is a sample",16
"SAMPLE A IS tHIS"
"nowcoder",8
"NOWCODER"
"iOS",3
"Ios"
package main
import "strings"
func trans(s string, n int) string {
strs := strings.Split(s, " ")
ans := []rune{}
for i := len(strs) - 1; i >= 0; i-- {
runes := []rune(strs[i])
for j := 0; j < len(runes); j++ {
if runes[j] >= 'A' && runes[j] <= 'Z' {
runes[j] += 'a' - 'A'
} else {
runes[j] -= 'a' - 'A'
}
ans = append(ans, runes[j])
}
if i != 0 {
ans = append(ans, ' ')
}
}
return string(ans)
}
func trans(s string, n int) string {
// 大小写
var sb strings.Builder
for i := 0; i < len(s); i++ {
if 'a' <= s[i] && s[i] <= 'z' {
sb.WriteByte(s[i] - 32)
} else if 'A' <= s[i] && s[i] <= 'Z' {
sb.WriteByte(s[i] + 32)
} else {
sb.WriteByte(s[i])
}
}
// 反转
arr := strings.Split(sb.String(), " ")
i, j := 0, len(arr)-1
for ; i < j; i, j = i+1, j-1 {
arr[i], arr[j] = arr[j], arr[i]
}
return strings.Join(arr, " ")
} func trans(s string, n int) string {
var world, newStr = "", ""
for _, c := range s {
if c >= rune('a') && c <= rune('z') {
c = c - 32
world = world + string(c)
} else if c >= rune('A') && c <= rune('Z') {
c = c + 32
world = world + string(c)
} else {
newStr = " " + world + newStr
world = ""
}
}
newStr = world + newStr
return newStr
}