翼度科技»论坛 编程开发 JavaScript 查看内容

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

9

主题

9

帖子

27

积分

新手上路

Rank: 1

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

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

1、第一次尝试
  1. function mergeAlternately(word1: string, word2: string): string {
  2.     // 采用三元运算符
  3.     let max_len = word1.length < word2.length ? word2.length : word1.length;
  4.     // 字符串直接拼接
  5.     let cache_str = "";
  6.     for (let i = 0; i < max_len; i++) {
  7.         // 如果长度超出字符串长度,则会得到undefined
  8.         if (word1[i] != undefined) {
  9.             cache_str += word1[i];
  10.         }
  11.         if (word2[i] != undefined) {
  12.             cache_str += word2[i];
  13.         }
  14.     }
  15.     return cache_str;
  16. };
复制代码
分析:

​        (1)执行时间和内存占用略高,不太理想。
​        (2)可读性略差。
2、第二次尝试
  1. function mergeAlternately(word1: string, word2: string): string {
  2.     // 用内置函数Math.max替换
  3.     // let max_len = word1.length < word2.length ? word2.length : word1.length;
  4.     let max_len=Math.max(word1.length,word2.length);
  5.     let cache_str = "";
  6.     for (let i = 0; i < max_len; i++) {
  7.         // 直接判断长度
  8.         // if (word1[i] != undefined) {
  9.         if (i < word1.length) {
  10.             cache_str += word1[i];
  11.         }
  12.         // if (word2[i] != undefined) {
  13.         if (i < word2.length) {
  14.             cache_str += word2[i];
  15.         }
  16.     }
  17.     return cache_str;
  18. };
复制代码
分析:

​        (1)内置函数通常经过优化,性能上可能略优于手写的三元运算符。
​        (2)word1在每次索引时,都会进行一次查找操作,会稍微影响性能,尤其是在循环中频繁执行时。而i < word2.length不需要实际访问索引。所以直接进行长度比较,相对于取值再比较更快。
3、较优解
  1. function mergeAlternately(word1: string, word2: string): string {
  2.     let index = 0  // 长度计数
  3.     let str = ''
  4.     // 使用while循环,如果有其中一个字符串已经遍历完毕,则停止
  5.     while (word1[index]!=null && word2[index]!=null) {
  6.         str += word1[index]+word2[index]  // 一次插入两个值
  7.         index++;  // 计数加一
  8.     }
  9.     // 判断剩余字符串
  10.     if (word1[index]) {
  11.         // 将 word1 字符串从指定的 index 开始到字符串末尾的子字符串追加到 str 变量中。
  12.         str += word1.substring(index);
  13.     }
  14.     else if (word2[index]) {
  15.         str += word2.substring(index);
  16.     }
  17.     return str
  18. };
复制代码
分析:

​        (1)一次性添加两个字符,直到短字符串结束,优化效率。
​        (2)使用substring直接添加剩余字符,减少循环。
  1. // 使用数组
  2. function mergeAlternately(word1: string, word2: string): string {
  3.     let index = 0;
  4.     let resultArray: string[] = [];
  5.    
  6.     while (word1[index] != null && word2[index] != null) {
  7.         resultArray.push(word1[index]);
  8.         resultArray.push(word2[index]);
  9.         index++;
  10.     }
  11.     // 减少判断
  12.     resultArray.push(word1.substring(index));
  13.     resultArray.push(word2.substring(index));
  14.    
  15.     return resultArray.join('');
  16. }
复制代码
分析:

​        (1)使用字符数组而不是字符串拼接,在面对长字符串时效率更高。
​        (2)直接pash剩余字符,并使用.join('')消除空字符,减少逻辑判断。

来源:https://www.cnblogs.com/ChangShinK/p/18538169
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具