/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param s string字符串 
 * @param n int整型 
 * @return string字符串
 */

/**
 * 解法一:正则
 * 时间复杂度: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
}