
3-4題目:最常出現的字母
撰寫一個函數,傳入引數為一個字串,其輸出的結果會將該字串中出現頻率最高的字母輸出。
JS max_character.htm
const my_max = str =>{
const words = {}; //You can create a const object
for (let ch of str)
words[ch] = words[ch]+1 || 1;
let counter = 0;
let most = null;
for (let ch in words) {
if (words[ch] > counter){
counter = words[ch];
most = ch;
}
}
return most;
};
console.log(my_max("tomorrow"));
PHP max_character.php
//$my_str="不要在你的智慧中夾雜著傲慢。不要使你的謙虛新缺乏智慧。";
$my_str="Hello World! 你好世界!";
//$my_str="我為人人,人人為我";
//$my_str="gooddoog";
echo "原來的字串:".$my_str."<br>";
function mb_str_split($str){
//不分中英字串都可以切成陣列
return preg_split('/(?<!^)(?!$)/u',$str);
}
function get_most_str($str){
$arr = mb_str_split($str); //切字串成陣列
$len = count ($arr);
$my_count = 0;
for ($i=0 ; $i<=$len-1; $i++){
$str_count=substr_count($str,$arr[$i]);
//計算出現次數
if ($str_count>$my_count){
$my_count=$str_count;
$most = $arr[$i];
}
}
return [$most,$my_count];
}
$most_str= get_most_str($my_str);
echo "最大數為".$most_str[0]."=".$most_str[1]."<br>";
使用函數:
substr_count() 計算子字串在字串中出現的次數
3-5題目:判斷兩字是否相同 Anagrams
這個函數的功能是給定兩個包含相同數量的字母的單字或片語,並進行判斷所傳入的單字或片語是否相同的檢查函數。
JS anagrams.js
const compare = str =>{
const table ={}; //宣告一個table物件
for (let char of str.replace(/\w/g, "").toLowerCase())
table[char] = table[char]+1 || 1;
return table;
};
const anagrams = (strA, strB) =>{
const charA = compare(strA);
const charB = compare(strB);
if (Object.keys(charA).length !==Object.keys(charB).length)
return false;
for (let char in charA)
if (charA[char] !== charB[char]) return false;
return true;
};
console.log(anagrams("happy birthday", "happy birthday"));
console.log(anagrams("happyy birthday", "hhappy birthday"));
說明:
str.replace(/\w/g,"").toLowerCase();
\w 包含數字字母與底線,等同於[A-Za-z0-9_] 出處
PHP anagrams.php
$my_str_1="happy birthday";
//$my_str_1="大家好";
$my_str_2="hhhappybirthday";
//$my_str_2="happy birthday";
echo "字串_1:".$my_str_1."<br>";
echo "字串_2:".$my_str_2."<br>";
function mb_str_split($str){
//不分中英字串都可以切成陣列
return preg_split('/(?<!^)(?!$)/u',$str);
}
/*
$str_1_ar = mb_str_split($my_str_1);
$str_2_ar = mb_str_split($my_str_2);
$str_len_1 = count ($str_1_ar);
$str_len_2 = count ($str_2_ar);
$flag =($str_len_1 != $str_len_2) ;
$i=0;
if($flag==1){
echo "這兩個長度不同<br>";
}else{
while ($i<= $str_len_1-1){
$flag2=strcmp($str_1_ar[$i],$str_2_ar[$i]);
if($flag2==1){
echo "這兩個字母不同<br>";
break;
}
$i++;
}
}
*/
function my_anagrams ($str1, $str2){
$str_1_ar = mb_str_split($str1);
$str_2_ar = mb_str_split($str2);
$str_len_1 = count ($str_1_ar);
$str_len_2 = count ($str_2_ar);
$flag1 =($str_len_1 != $str_len_2) ;
$i=0;
$msg1="這兩個長度相同<br>";
$msg2="這兩個字母相同<br>";
if($flag1==1){
$msg1="這兩個長度不同<br>";
$msg2="這兩個字母不同<br>";
}
else{
while ($i<= $str_len_1-1){
$flag2=strcmp($str_1_ar[$i],$str_2_ar[$i]);
if($flag2==1){
$msg2="這兩個字母不同<br>";
}
$i++;
}//while
}//elseif
return [$msg1,$msg2];
}//function
$my_msg = my_anagrams($my_str_1,$my_str_2);
echo $my_msg[0];
echo $my_msg[1];
函數使用:
strcmp(str1,str2) 比較兩個字串(對大小寫敏感)
3-6題目:反向陣列 Reverse Array
將給定的陣列中的元素,由前往後排列方式,變更成由後往前的排列順序。例如給定原陣列的內容值為[1,2,3,4],則所撰寫的這個函數會回傳[4,3,2,1]‵.
JS reverse.js
const rev1 = dim =>{
for (let i=0; i <dim.length /2; i++){
const temp = dim[i];
dim[i] = dim[dim.length-1-i];
dim[dim.length-1-i]=temp;
}
return dim;
};
const rev2 = dim =>{
for (let i=0; i<dim.length/2; i++) {
[dim[i], dim[dim.length-1-i]] = [
dim[dim.length-1-i], dim[i]
];
}
return dim;
};
console.log("['a','e','i','o','u']反向陣列:",rev1(['a','e','i','o','u']));
console.log("[2,4,6,8,10]反向陣列:",rev2([2,4,6,8,10]));
$my_arr_1=array("a","e","i","o","u");
$my_arr_2=array(2,4,6,8,10);
//$my_str_2="happy birthday";
echo "陣列_1:";
print_r($my_arr_1);
echo "<br>";
echo "陣列_2:";
print_r($my_arr_2);
$re_arr_1 = array_reverse($my_arr_1);
$re_arr_2 = array_reverse($my_arr_2);
echo "<br>";
echo "反陣列_1:";
print_r($re_arr_1);
echo "<br>";
echo "反陣列_2:";
print_r($re_arr_2);
函數使用:
array_reverse($arr) 以相反的順序傳回數組