1. 程式人生 > >按照單詞的字母是否相同對字串陣列進行分組

按照單詞的字母是否相同對字串陣列進行分組

好久不動手寫程式碼了,真得有些生疏了。正所謂:曲不離口,拳不離手;勤行果然還是要常練習的。

上午看到一個面試題,是java版的,然後覺得給學生拿來做測試題不錯,所以嘗試寫了一下,但真去做得時候,發現並不如相像那樣簡單。

需求:

給了一個數組(如: [“cars”, “thing”, “scar”, “dog”, “god”, “arcs”, “the”]),需要把由顛倒字母順序組成的單詞放到同一個陣列(生成後的結果:[[“cars”, “scar”, “arcs”], [“thing”], [“dog”, “god”], [“the”]])

解決思路:

兩重遍歷,第一遍過按照給定陣列過濾,第二重,把當前單詞以外沒有做過比較的單詞與其進行比較

一種寫法的程式碼實現:

<?php

$tool = ["cars", "thing", "scar", "dog", "god", "arcs", "the"];  // 用於遍歷迴圈

$words = ["cars", "thing", "scar", "dog", "god", "arcs", "the"];  // 用於比較、排除的陣列

$res =  array( );  // 用於存放結果


// 先遍歷整個陣列
foreach ($tool as $pos => $word) {

    $temp =  array();

    $wordArr = str_split($word
); if (in_array($word, $words)) { // 以下if判斷從比較陣列中清除當前參與比較的單詞 $tempKey = array_search($word,$words); if(isset($tempKey)){ unset($words[$tempKey]); } $temp[] = $word; // 把當前單詞加入臨時陣列; }else{ continue; // 跳過已比較過的單詞 } // 以下迴圈將當前單詞與未參與比較過的單詞進行比較
foreach ($tool as $comparingPos => $comparingWord) { if (in_array($comparingWord, $words)) { $comparingArr = str_split($comparingWord); $intersect = array_intersect($comparingArr, $wordArr); if (count($wordArr)== count($intersect)) { $temp[] = $comparingWord; // 把當前單詞加入臨時陣列; $tempKey = array_search($comparingWord,$words); if(isset($tempKey)){ unset($words[$tempKey]); } } }else{ continue;// 跳過已比較過的單詞 } } // 將比較結果放入陣列 if (!!$temp) { $res[] =$temp; } } var_dump($res);

後記:

為啥要多餘地寫兩個陣列?因為迴圈計數器的問題。