概念理解
字符串(英语:string),是由零个或多个字符组成的有限序列。
使用场景
字符串
是JS的基本数据类型,也是算法面试中的常客。应对此类题型,我们不仅要掌握字符串的常用操作方法,要知道哪些操作会改变原字符串,哪一些是生成新的字符串,还要知道字符串的各种遍历方法,以及一些简单的正则匹配语法。详细可参考 前端算法入门一:刷算法题常用的JS基础扫盲
例题讲解
题目: 字符串变形
描述
对于一个长度为 n 字符串,我们需要对它做一些变形。
首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。
比如"Hello World"变形后就变成了"wORLD hELLO"。
进阶:空间复杂度 O(n)O(n) , 时间复杂度 O(n)O(n)
输入描述:
给定一个字符串s以及它的长度n(1 ≤ n ≤ 10^6)
返回值描述:
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。
示例1
输入:
"This is a sample",16
返回值:
"SAMPLE A IS tHIS"
示例2
输入:
"nowcoder",8
返回值:
"NOWCODER"
示例3
输入:
"iOS",3
返回值:
"Ios"
题解:
/**
* 解法一:正则
* 时间复杂度:O(n)
* 空间复杂度:O(n)
*/
export function trans(s: string, n: number): string {
let res: string = ''
if (s.length === 0 || n === 0) return res
// 翻转
const revStrArr: string[] = s.split(' ').reverse()
const revStr: string = revStrArr.join(' ')
// 大小写转换
const reg1 = /[a-z]/
const reg2 = /[A-Z]/
for (let i = 0; i < revStr.length; i++) {
if (reg1.test(revStr[i])) {
res += revStr[i].toUpperCase()
} else if (reg2.test(revStr[i])) {
res += revStr[i].toLowerCase()
} else {
res += ' '
}
}
return res
}
/**
* 解法二:charAtCode(0)性能更好,推荐
* 时间复杂度:O(n)
* 空间复杂度:O(n)
*/
export function trans(s: string, n: number): string {
let res = ''
if (s.length === 0 || n === 0) return res
// 翻转
const revStrArr = s.split(' ').reverse()
const revStr = revStrArr.join(' ')
// 大小写转换
for (let i = 0; i < revStr.length; i++) {
const code = revStr[i].charCodeAt(0)
if (code >= 97 && code <= 122) {
res += revStr[i].toUpperCase()
} else if (code >= 65 && code <= 90) {
res += revStr[i].toLowerCase()
} else {
res += ' '
}
}
return res
}
题集&题解
序号 | 题目 | 题解 | 难度 |
---|---|---|---|
1 | 字符串变形 | 题解 | easy |
2 | 最长公共前缀 | 题解 | easy |
3 | 验证IP地址 | 题解 | hard |
4 | 大数加法 | 题解 | hard |
相关文章
- 前端算法入门一:刷算法题常用的JS基础扫盲
- 前端算法入门二:时间空间复杂度&8大数据结构的JS实现
- 前端算法入门三:5大排序算法&2大搜索&4大算法思想
- 前端面试算法高频100题(附答案,分析思路,一题多解)
您的点赞和评论是我持续更新的动力,感谢关注。