TypeScript基础(一)——交替合并字符串
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 != undefined) {
cache_str += word1;
}
if (word2 != undefined) {
cache_str += word2;
}
}
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 != undefined) {
if (i < word1.length) {
cache_str += word1;
}
// if (word2 != undefined) {
if (i < word2.length) {
cache_str += word2;
}
}
return cache_str;
};分析:
(1)内置函数通常经过优化,性能上可能略优于手写的三元运算符。
(2)word1在每次索引时,都会进行一次查找操作,会稍微影响性能,尤其是在循环中频繁执行时。而i < word2.length不需要实际访问索引。所以直接进行长度比较,相对于取值再比较更快。
3、较优解
function mergeAlternately(word1: string, word2: string): string {
let index = 0// 长度计数
let str = ''
// 使用while循环,如果有其中一个字符串已经遍历完毕,则停止
while (word1!=null && word2!=null) {
str += word1+word2// 一次插入两个值
index++;// 计数加一
}
// 判断剩余字符串
if (word1) {
// 将 word1 字符串从指定的 index 开始到字符串末尾的子字符串追加到 str 变量中。
str += word1.substring(index);
}
else if (word2) {
str += word2.substring(index);
}
return str
};分析:
(1)一次性添加两个字符,直到短字符串结束,优化效率。
(2)使用substring直接添加剩余字符,减少循环。
// 使用数组
function mergeAlternately(word1: string, word2: string): string {
let index = 0;
let resultArray: string[] = [];
while (word1 != null && word2 != null) {
resultArray.push(word1);
resultArray.push(word2);
index++;
}
// 减少判断
resultArray.push(word1.substring(index));
resultArray.push(word2.substring(index));
return resultArray.join('');
}分析:
(1)使用字符数组而不是字符串拼接,在面对长字符串时效率更高。
(2)直接pash剩余字符,并使用.join('')消除空字符,减少逻辑判断。
来源:https://www.cnblogs.com/ChangShinK/p/18538169
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]