前言
今天我们来分享一下如何使用算法切换字母的大小写
样例输出
输入一个字符串,切换其中字母的大小写
示例1:
输出: str = '98211aBcDeeF$#xY'
输入: str = '98211AbCdEEf$#Xy'
示例2:
输出: str = '100$%你好'
输入: str = '100$%你好'
方法一(正则表达式)
解题思路:
使用正则表达式分别匹配大写和小写字母,使用toUpperCase()方法转换字母的大小写
代码演示:
export function switchLetterCase1(s: string): string {
let res = ''
const length = s.length
if (length === 0) return res
const reg1 = /[a-z]/
const reg2 = /[A-Z]/
for (let i = 0; i < length; 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
}
方法二(ASCII)
解题思路:
通过查询字母的ASCII码,来判断字母是否为大小写,之后再通过toUpperCase()方法转换字母的大小写
代码演示:
export function switchLetterCase2(s: string): string {
let res = ''
let length = s.length
for (let i = 0; i < length; i++) {
let c = s[i]
const c_ASC = c.charCodeAt(0)
if (c_ASC >= 65 && c_ASC <= 90) {
// 转化为小写
c = c.toLowerCase()
res+=c
} else if (c_ASC >= 97 && c_ASC <= 122) {
// 转化为大写
c = c.toUpperCase()
res+=c
} else {
res+=c
}
}
return res
}
性能测试
// const str = '100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz'
// console.time('switchLetterCase1')
// for (let i = 0; i < 10 * 10000; i++) {
// switchLetterCase1(str)
// }
// console.timeEnd('switchLetterCase1') // 436ms
// console.time('switchLetterCase2')
// for (let i = 0; i < 10 * 10000; i++) {
// switchLetterCase2(str)
// }
// console.timeEnd('switchLetterCase2') // 210ms
单元测试
describe('切换字母大小写', () => {
it('正常', () => {
const str = '100aBcD$#xYz'
const res = switchLetterCase2(str)
expect(res).toBe('100AbCd$#XyZ')
})
it('空字符串', () => {
const res = switchLetterCase2('')
expect(res).toBe('')
})
it('非字母', () => {
const res = switchLetterCase2('100$%你好')
expect(res).toBe('100$%你好')
})
})