【数据结构与算法】(18):字母大小写切换


字数:647 阅读时长:3分钟 阅读:85

经典算法题:输入一个字符串,切换其中字母的大小写,下面将分别使用 正则匹配ASCII编码 判断的形式去实现。

数据结构与算法 · 字母大小写切换

一、问题示例

示例 1:

  • 输入:A23#$5bcF
  • 输出:a23#$5BCf

示例 2:

  • 输入:你好啊%……&001
  • 输出:你好啊%……&001

二、代码演示

  1. 正则匹配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 切换字母大小写 正则

export function switchLetterCase1(s: string): string {
let res = ''

const len = s.length
if (len ===0) return res
const reg1 = /[a-z]/
const reg2 = /[A-Z]/

for (let i = 0; i < len; i++) {
const c = s[i]
if (reg1.test(c)) {
res += c.toUpperCase()
} else if (reg2.test(c)) {
res += c.toLowerCase()
} else {
res += c
}
}

return res
}
  1. ASCII编码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 切换字母大小写 ASCII编码

export function switchLetterCase2(s: string): string {
let res = ''

const len = s.length
if (len === 0) return res

for (let i = 0; i < len; i++) {
const c = s[i]
const code = c.charCodeAt(0)

if (code >= 65 && code <= 90) {
res += c.toLowerCase()
} else if (code >= 97 && code <= 122) {
res += c.toUpperCase()
} else {
res += c
}
}

return res
}

三、单元测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 切换字母大小写

import { switchLetterCase1, switchLetterCase2 } from '../switch-letter-case.ts'

describe('切换字母大小写 正则匹配', () => {
it('正常情况', () => {
const s = '12A54btr34Agh89'
const res = switchLetterCase1(s)
expect(res).toBe('12a54BTR34aGH89')
})
it('空字符串', () => {
const res = switchLetterCase1('')
expect(res).toBe('')
})
it('非字母', () => {
const res = switchLetterCase1('你好啊%……&001')
expect(res).toBe('你好啊%……&001')
})
})

describe('切换字母大小写 charCode编码', () => {
it('正常情况', () => {
const s = '12A54btr34Agh89'
const res = switchLetterCase2(s)
expect(res).toBe('12a54BTR34aGH89')
})
it('空字符串', () => {
const res = switchLetterCase2('')
expect(res).toBe('')
})
it('非字母', () => {
const res = switchLetterCase2('你好啊%……&001')
expect(res).toBe('你好啊%……&001')
})
})

四、性能测试

1
2
3
4
5
6
7
8
9
10
11
12
13
const s = '12A54$%^&9*btr34Agh8912A54$%^&9*btr34Agh8912A54$%^&9*btr34Agh8912A54$%^&9*btr34Agh89'

console.time('switchLetterCase1')
for (let i = 0; i < 10 * 10000; i++) {
switchLetterCase1(s)
}
console.timeEnd('switchLetterCase1')

console.time('switchLetterCase2')
for (let i = 0; i < 10 * 10000; i++) {
switchLetterCase2(s)
}
console.timeEnd('switchLetterCase2')





switchLetterCase1 run time: 0


switchLetterCase2 run time: 0


  • 使用正则表达式,性能较差
  • 使用ASCII码判断,性能较好(推荐)

欢迎访问:天问博客

本文作者: Tiven
发布时间: 2023-07-26
最后更新: 2023-08-01
本文标题: 【数据结构与算法】(18):字母大小写切换
本文链接: https://www.tiven.cn/p/71fe52ce/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^
个人邮箱: tw.email@qq.com
notification icon
博客有更新,将会发送通知给您!