題目:算法
預備代碼:數組
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();