用PHP写一个字谜函数?

Posted

技术标签:

【中文标题】用PHP写一个字谜函数?【英文标题】:Using PHP write an anagram function? 【发布时间】:2014-03-08 15:30:39 【问题描述】:

它应该处理不同的短语并返回布尔结果。

用法:

$pharse1 = 'ball';
$pharse2 = 'lbal';
if(is_anagram($pharse1,$pharse2))
  echo $pharse1 .' & '. $pharse2 . ' are anagram';
else
  echo $pharse1 .' & '. $pharse2 . ' not anagram';

【问题讨论】:

你自己的问题回答了吗? 是的。我回答了我的问题 一分钟内很快。你为什么认为这个问题有助于 SO。换句话说,你为什么要放置它。 我认为下一步将是接受您的回答。 ;-) 哈哈哈...今天不让我做。所以明天需要试试。 ;-) 【参考方案1】:

还有更简单的方法

function is_anagram($a, $b) 
    return(count_chars($a, 1) == count_chars($b, 1));

示例:

$a = 'argentino';
$b = 'ignorante';
echo is_anagram($a,$b);   // output: 1

$a = 'batman';
$b = 'barman';
echo is_anagram($a,$b);  // output (empty):

【讨论】:

【参考方案2】:
function is_anagram($pharse1,$pharse2)
  $status = false;
  if($pharse1 && $pharse2)
   $pharse1=strtolower(str_replace(" ","", $pharse1));
   $pharse2=strtolower(str_replace(" ","", $pharse2));
   $pharse1 = str_split($pharse1);
   $pharse2 = str_split($pharse2);
   sort($pharse1);
   sort($pharse2);
   if($pharse1 === $pharse2)
   $status = true;
    
  
  return $status;

【讨论】:

【参考方案3】:
 function check_anagram($str1, $str2) 
      if (count_chars($str1, 1) == count_chars($str2, 1)) 
           return "This '" . $str1 . "', '" . $str2 . "' are Anagram";
      
      else 
          return "This two strings are not anagram";
      

  
    ECHO check_anagram('education', 'ducatione');

【讨论】:

【参考方案4】:

我没有看到任何答案解决了大写字母与小写字母与 count_chars() 不同的字符这一事实

if (isAnagram('Polo','pool')) 
    print "Is anagram";
 else 
    print "This is not an anagram";


function isAnagram($string1, $string2)

    // quick check, eliminate obvious mismatches quickly
    if (strlen($string1) != strlen($string2)) 
        return false;
    

    // Handle uppercase to lowercase comparisons
    $array1 = count_chars(strtolower($string1));
    $array2 = count_chars(strtolower($string2));

    // Check if 
    if (!empty(array_diff_assoc($array2, $array1))) 
        return false;
     
    if (!empty(array_diff_assoc($array1, $array2))) 
        return false;
     

    return true;

【讨论】:

【参考方案5】:

这是我的变种:

public function is_anagram($wrd_1, $wrd_2) 
  
  $wrd_1 = str_split ( strtolower ( utf8_encode($wrd_1) ) );
  $wrd_2 = str_split( strtolower ( utf8_encode($wrd_2) ) );

  if ( count($wrd_1)!= count($wrd_2) ) return false;
  if ( count( array_diff ( $wrd_1 ,$wrd_2) ) > 0 ) return false;

  return true;
  

【讨论】:

【参考方案6】:

呵呵,虽然不大,但也很好用 :)

  public static function areStringsAnagrams($a, $b)

    //throw new Exception('Waiting to be implemented.');
    $a = str_split($a);

    $test = array();
    $compare = array();

    foreach ($a as $key) 
        if (!in_array($key, $test)) 
            array_push($test, $key);
            $compare[$key] = 1;
         else 
            $compare[$key] += 1;
         
    

    foreach ($compare as $key => $value) 
        if ($value !== substr_count($b, $key)) 
            return false;
        

    
    return true;

【讨论】:

以上是关于用PHP写一个字谜函数?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 字谜解谜器

php |字谜求解器通过 woldcard 查找不在原始搜索中的字母

在给定的字符串列表中查找字符串的所有字谜

字谜查找程序 php mysql

查找最长字谜的算法

PHP中的字谜算法