- 有字串A,B,求取AB字串中都含有的字元,例如:①A="hello",B="jeesite",那麼輸出"e",②A="common",B="month",則輸出"mno",輸出串的順序沒有要求.
思路1:把A去重得到A1,B去重得到B1,然後對A1,B1分別進行排序,然後遍曆較短的字串的每個字元是否存在於較長的字串中,存在則輸出問題:1.思路很簡單,基本大家都會這麼考慮,但是面試的時候就沒有亮點了思路2:假設AB串只包含小寫(其實無所謂),那麼建立一個數組,數組的key為a->z,value都是0;php function stringToChar($str,$num=1,$tmp=null){ if(empty($tmp)){$tmp=array('a'=>0,'b'=>0,'c'=>0,'d'=>0,'e'=>0,'f'=>0,'g'=>0,'h'=>0,'i'=>0,'j'=>0,'k'=>0,'l'=>0,'m'=>0,'n'=>0,'o'=>0,'p'=>0,'q'=>0,'r'=>0,'s'=>0,'t'=>0,'u'=>0,'v'=>0,'w'=>0,'x'=>0,'y'=>0,'z'=>0); } $arr_temp=str_split($str,1); foreach($arr_tempas$v){ if($tmp[$v]<$num){ $tmp[$v]+=$num; } } return$tmp; } function getStringIntersect($str1, $str2){ $temp=stringToChar($str1,1); //$str2的$num用2 就是為了區分 stemp中的原來的1 是 $str1中設定的$temp=stringToChar($str2,2,$temp); $result=''; foreach ($tempas$key => $value) { if($value===3){ $result.=$key; } } return$result; } $A="common";//"hello";$B="month";//"jeesite";$result=getStringIntersect($A, $B); echo$result;?>
以上就介紹了面試題之演算法集錦,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。