TypeScript基础(一)——交替合并字符串

  • TypeScript基础(一)——交替合并字符串已关闭评论
  • 29 次浏览
  • A+
所属分类:Web前端
摘要

​ (1)执行时间和内存占用略高,不太理想。​ (2)可读性略差。​ (1)内置函数通常经过优化,性能上可能略优于手写的三元运算符。


TypeScript基础(一)—— 交替合并字符串

题设:输入“abc”、“ef”,输出“aebfc”。

1、第一次尝试
function mergeAlternately(word1: string, word2: string): string {     // 采用三元运算符     let max_len = word1.length < word2.length ? word2.length : word1.length;     // 字符串直接拼接     let cache_str = "";     for (let i = 0; i < max_len; i++) {         // 如果长度超出字符串长度,则会得到undefined         if (word1[i] != undefined) {             cache_str += word1[i];         }         if (word2[i] != undefined) {             cache_str += word2[i];         }     }     return cache_str; }; 
分析:

​ (1)执行时间和内存占用略高,不太理想。

​ (2)可读性略差。

2、第二次尝试
function mergeAlternately(word1: string, word2: string): string {     // 用内置函数Math.max替换     // let max_len = word1.length < word2.length ? word2.length : word1.length;     let max_len=Math.max(word1.length,word2.length);     let cache_str = "";     for (let i = 0; i < max_len; i++) {         // 直接判断长度         // if (word1[i] != undefined) {         if (i < word1.length) {             cache_str += word1[i];         }         // if (word2[i] != undefined) {         if (i < word2.length) {             cache_str += word2[i];         }     }     return cache_str; }; 
分析:

​ (1)内置函数通常经过优化,性能上可能略优于手写的三元运算符。

​ (2)word1[i]在每次索引时,都会进行一次查找操作,会稍微影响性能,尤其是在循环中频繁执行时。而i < word2.length不需要实际访问索引。所以直接进行长度比较,相对于取值再比较更快。

3、较优解
function mergeAlternately(word1: string, word2: string): string {     let index = 0  // 长度计数     let str = ''     // 使用while循环,如果有其中一个字符串已经遍历完毕,则停止     while (word1[index]!=null && word2[index]!=null) {         str += word1[index]+word2[index]  // 一次插入两个值         index++;  // 计数加一     }     // 判断剩余字符串     if (word1[index]) {         // 将 word1 字符串从指定的 index 开始到字符串末尾的子字符串追加到 str 变量中。         str += word1.substring(index);     }      else if (word2[index]) {         str += word2.substring(index);     }      return str }; 
分析:

​ (1)一次性添加两个字符,直到短字符串结束,优化效率。

​ (2)使用substring直接添加剩余字符,减少循环。

// 使用数组 function mergeAlternately(word1: string, word2: string): string {     let index = 0;     let resultArray: string[] = [];          while (word1[index] != null && word2[index] != null) {         resultArray.push(word1[index]);         resultArray.push(word2[index]);         index++;     }     // 减少判断     resultArray.push(word1.substring(index));     resultArray.push(word2.substring(index));          return resultArray.join(''); } 
分析:

​ (1)使用字符数组而不是字符串拼接,在面对长字符串时效率更高。

​ (2)直接pash剩余字符,并使用.join('')消除空字符,减少逻辑判断。