题目:算法
预备代码:数组
1 // 自定义输出 2 var log = function () { 3 console.log.apply(this, arguments); 4 }; 5 6 7 // ====== 8 // 测试 9 // ====== 10 // 11 // 定义用于测试的函数 12 // ensure 接受两个参数 13 // condition 是 bool, 若是为 false, 则输出 message 14 // 不然, 不作任何处理 15 var ensure = function(condition, message) { 16 // 在条件不成立的时候, 输出 message 17 if(!condition) { 18 log('*** 测试失败:', message) 19 } 20 };
题目代码:app
1 // 找出字符串中出现次数最多的字母: 2 function func(str) { 3 var arr = {}; 4 // 把每一个字母和其对应出现的次数存到对象(字典)中 5 for (var i = 0; i < str.length; i++) { 6 if (arr[str[i]] === undefined){ 7 arr[str[i]] = 1 8 } 9 else{ 10 arr[str[i]] += 1 11 } 12 } 13 var max = 0; 14 var chart = ""; 15 for(var s in arr){ 16 var num = arr[s]; 17 if(num>max){ 18 max = num; 19 chart = s; 20 } 21 } 22 log(arr); 23 log(chart.toString()+max.toString()); 24 25 res = chart.toString()+max.toString(); 26 27 return res 28 } 29 result = func("WelcomeToQianfeng");
1 // 分割单词 2 var str2={}; 3 function word(str1){ 4 for(var i=1;i<str1.length;i++){ 5 // 思路: 在第一个字母以后 若是发现有大写字母后面是小写字母 就把这个大写字母换成空格和这个大写字母 6 // 检测是否为大写字母 7 if(/[A-Z]/g.test(str1[i])){ 8 // 检测是不是小写字母 9 if(/[a-z]/g.test(str1[i-1])){ 10 str1=str1.replace(str1[i], " "+str1[i]); 11 } 12 } 13 } 14 // str2是str1的子串(str1第一个字符以后的子串) 15 str2=str1.substring(1); 16 log(str1[0]+str2.toLowerCase()); 17 18 return str1[0]+str2.toLowerCase(); 19 } 20 21 result = word("HelloMyWorld");
1 // 单词逆序 2 // Welome to Beijing -> Beijing to Welcome 3 // 思路: 先将字符串分割成一个个的词,而后将这些词存入数组中并逆序,最后链接起来便可 4 var arr=[]; 5 var str3="Welome to Beijing"; 6 arr=str3.split(" "); 7 var str4=arr.reverse(); 8 var res = str4.join(" "); 9 log(arr); 10 log(res);
1 // 做业 1 2 // 字符串s1和字符串s2 但 s2 的长度是 1 返回 s2 在 s1 中的下标, 从 0 开始, 若是不存在则返回 -1 3 var find = function(s1, s2) { 4 var len = s1.length; 5 if(s1.includes(s2)) { 6 for (var i = 0; i < len; i++) { 7 var str = s1[i]; 8 if (str === s2) { 9 //log("i 的值:",i) 10 return i 11 } 12 } 13 } 14 // log(-1) 15 return -1 16 };
1 // 做业2-1 2 // 返回字符串的小写形式的函数 注意, 这里假设了字符串全是大写字母 3 // 这里是两个字符串, 包含了大写字母和小写字母 4 var lower = 'abcdefghijklmnopqrstuvwxyz'; 5 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 6 7 var lowercase = function(s) { 8 // 初始化一个空字符串 9 var result = ""; 10 for (var i = 0; i < s.length; i++) { 11 // 注意, 这个 find 是你要实现的函数 12 var index = find(upper, s[i]); 13 // 字符串能够用加号拼接, 不明白能够 log 一下 14 result += lower[index]; 15 } 16 return result; 17 }; 18 19 // var test_lowercase = function() { 20 // ensure(lowercase('SDEW') === 'sdew','测试1失败') 21 // }; 22 // test_lowercase(); 23 24 25 // 做业 2-2 26 // 定义一个函数 参数是一个字符串 返回大写后的字符串 注意字符串全是小写字母 27 var lower = 'abcdefghijklmnopqrstuvwxyz'; 28 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 29 30 var uppercase = function(s) { 31 var result = ""; 32 for (var i = 0; i < s.length; i++) { 33 var index = find(lower,s[i]); 34 result += upper[index] 35 } 36 return result 37 }; 38 39 // var test_uppercase = function() { 40 // ensure(uppercase('sdwt') === 'SDWT','测试1失败') 41 // }; 42 // test_uppercase();
1 // 做业 3 2 // 实现 lowercase1 它能正确处理带 小写字母 的字符串s 返回 小写字母 的字符串 3 var lower = 'abcdefghijklmnopqrstuvwxyz'; 4 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 5 var lowercase1 = function(s) { 6 var result = ""; 7 var len = s.length; 8 for (var i = 0; i < len; i++) { 9 if (upper.includes(s[i])) { 10 var index = find(upper,s[i]); 11 result += lower[index] 12 //log(result) 13 }else { 14 result += s[i] 15 //log(result) 16 } 17 } 18 return result 19 }; 20 21 // var test_lowercase1 = function() { 22 // ensure(lowercase1('dadEG') === 'dadeg','测试1失败'); 23 // ensure(lowercase1('wWedaaLo') === 'wwedaalo','测试2失败'); 24 // }; 25 // test_lowercase1(); 26 27 28 // 做业 4 29 // 实现 uppercase1 它能正确处理带 大写字母 的字符串 返回 大写字母 的字符串 30 var uppercase1 = function(s) { 31 var result = ""; 32 var len = s.length; 33 for (var i = 0; i < len; i++) { 34 if (lower.includes(s[i])) { 35 var index = find(lower,s[i]); 36 result += upper[index]; 37 // log(result) 38 }else { 39 result += s[i]; 40 // log(result) 41 } 42 } 43 return result 44 }; 45 46 // var test_uppercase1 = function() { 47 // ensure(uppercase1('dadEG') === 'DADEG','测试1失败'); 48 // ensure(uppercase1('wWedaaLo') === 'WWEDAALO','测试2失败'); 49 // }; 50 // test_uppercase1();
1 // 做业 5 2 // 实现一个叫 凯撒加密 的加密算法, 描述以下: 3 // 对于一个字符串, 总体移位, 就是加密 4 // 以右移 1 位为例 原始信息 'afz' 会被加密为 'bga' 5 // 实现 encode1 函数, 把明文加密成密码并返回 右移 1 位 6 // 注意, 假设字符串必定只包含小写字符 7 var lower = 'abcdefghijklmnopqrstuvwxyz'; 8 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 9 var encode1 = function(s) { 10 var result = ""; 11 var len = s.length; 12 for (var i = 0; i < len; i++) { 13 var sl = s[i]; 14 var index = find(lower,s[i]); 15 if (s[i] === 'z') { 16 result += lower[0] 17 }else { 18 result += lower[index+1] 19 } 20 } 21 return result 22 }; 23 24 // var test_encode1 = function() { 25 // ensure(encode1('afz') === 'bga', "encode1测试1"); 26 // ensure(encode1('crp') === 'dsq', "encode1测试2"); 27 // }; 28 // test_encode1(); 29 30 31 // 做业 6 32 // 实现 decode1 函数, 把做业 5 加密的密码解密为明文并返回 33 var decode1 = function(s) { 34 var result = ""; 35 var len = s.length; 36 for (var i = 0; i < len; i++) { 37 var index = find(lower,s[i]); 38 if (s[i] === lower[0]) { 39 result += lower[25] 40 }else { 41 result += lower[index-1] 42 } 43 } 44 return result 45 }; 46 47 // var test_decode1 = function() { 48 // ensure(decode1('bga') === 'afz', "decode1测试1"); 49 // ensure(decode1('dsq') ==='crp', "decode1测试2"); 50 // }; 51 // test_decode1(); 52 53 54 // 做业 7 55 // 实现 encode2 相比encode1多了一个参数 shift 表示移的位移 56 var lower = 'abcdefghijklmnopqrstuvwxyz'; 57 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 58 var encode2 = function(s, shift) { 59 var result = ""; 60 var len = s.length; 61 for (var i = 0; i < len; i++) { 62 var sl = s[i]; 63 var index = find(lower,s[i]); 64 if (index + shift >= 26) { 65 result += lower[index + shift - 26] 66 }else { 67 result += lower[index + shift] 68 } 69 } 70 return result 71 }; 72 73 // var test_encode2 = function() { 74 // ensure(encode2('afz',1) === 'bga', "encode2测试1"); 75 // ensure(encode2('mxc',5) === 'rch', "encode2测试2"); 76 // }; 77 // test_encode2(); 78 79 80 // 做业 8 81 // 实现 decode2 相比decode1多了一个参数 shift 表示移的位数 82 var decode2 = function(s, shift) { 83 var result = ""; 84 var len = s.length; 85 for (var i = 0; i < len; i++) { 86 var index = find(lower,s[i]); 87 if (index - shift < 0) { 88 result += lower[index - shift + 26] 89 }else { 90 result += lower[index - shift] 91 } 92 } 93 return result 94 }; 95 96 // var test_decode2 = function() { 97 // ensure(decode2('afz',1) === 'zey', "decode2测试1"); 98 // ensure(decode2('mxc',5) === 'hsx', "decode2测试2"); 99 // }; 100 // test_decode2(); 101 102 /* 103 做业 9 104 实现 encode3 105 多了一个参数 shift 表示移的位数 106 若是 s 中包含了不是字母的字符, 好比空格或者其余符号, 则对这个字符不作处理保留原样 107 */ 108 var encode3 = function(s, shift) { 109 var str = lowercase1(s); 110 var result = ""; 111 var len = s.length; 112 for (var i = 0; i < len; i++) { 113 if (lower.includes(str[i])) { 114 result += encode2(str[i],shift) 115 } 116 else { 117 result += str[i] 118 } 119 } 120 return result 121 }; 122 123 // var test_encode3 = function() { 124 // ensure(encode3('5465WD4afz',1) === '5465xe4bga', "encode3测试1"); 125 // ensure(encode3(' 5~m@365!xc',5) === ' 5~r@365!ch', "encode3测试2"); 126 // }; 127 // test_encode3(); 128 129 130 /* 131 做业 10 132 实现 decode3 133 多了一个参数 shift 表示移的位数 134 若是 s 中包含了不是字母的字符, 好比空格或者其余符号, 则对这个字符不作处理保留原样 135 */ 136 var decode3 = function(s, shift) { 137 var str = lowercase1(s); 138 var result = ""; 139 var len = str.length; 140 for (var i = 0; i < len; i++) { 141 if (lower.includes(str[i])) { 142 result += decode2(str[i],shift) 143 } 144 else { 145 result += str[i] 146 } 147 } 148 return result 149 }; 150 151 // var test_decode3 = function() { 152 // ensure(decode3('W2玩儿3af$%(SD)z',1) === 'v2玩儿3ze$%(rc)y', "decode3测试1"); 153 // ensure(decode3('mW嗲2+*/.,xDW3c',5) === 'hr嗲2+*/.,syr3x', "decode3测试2"); 154 // }; 155 // test_decode3();