Php 如何消除与字谜结果相等或相反的字符串?
我已经接近我想要的了。我遇到了一些逻辑问题,如果结果与所述结果相等或相反,则不显示结果。我正在寻找两个美国州名的字谜,这是另外两个州名的字谜。我已经找到了解决方案,现在它实际上只是一个显示问题……我想。任何帮助都将不胜感激。多谢各位Php 如何消除与字谜结果相等或相反的字符串?,php,arrays,anagram,Php,Arrays,Anagram,我已经接近我想要的了。我遇到了一些逻辑问题,如果结果与所述结果相等或相反,则不显示结果。我正在寻找两个美国州名的字谜,这是另外两个州名的字谜。我已经找到了解决方案,现在它实际上只是一个显示问题……我想。任何帮助都将不胜感激。多谢各位 所以最大的问题是你把各州连接在一起的方式。在您要匹配的州列表中,您正在匹配阿拉巴马州阿拉斯加州和阿拉斯加州阿拉巴马州。所以一件好事就是只匹配唯一的两个状态组合 $doubleStates = array(); for ($i = 0, $max = count($
所以最大的问题是你把各州连接在一起的方式。在您要匹配的州列表中,您正在匹配阿拉巴马州阿拉斯加州和阿拉斯加州阿拉巴马州。所以一件好事就是只匹配唯一的两个状态组合
$doubleStates = array();
for ($i = 0, $max = count($states); $i < $max; $i++) {
// The first loop starts from the first element of the array
for ($j = $i + 1; $j < $max; $j++) {
// The second loop starts from the next element of the first loop
$doubleStates[] = $states[$i] . $states[$j];
}
}
$doubleStates=array();
对于($i=0,$max=count($states);$i<$max;$i++){
//第一个循环从数组的第一个元素开始
对于($j=$i+1;$j<$max;$j++){
//第二个循环从第一个循环的下一个元素开始
$doubleStates[]=$states[$i]。$states[$j];
}
}
我可能不应该为您编写所有的代码,但我被迷住了:
<?php
function findAnagrams($array) {
do {
$matcher = null;
$matches = array();
foreach ($array as $key => $val) {
if (is_null($matcher)) {
unset($array[$key]);
$matcher = $val;
} elseif (isAnagram($matcher, $val)) {
if (empty($matches)) {
$matches[] = $matcher;
}
$matches[] = $val;
}
}
if (count($matches) > 0) {
print_r($matches);
echo "<br >";
}
} while (count($array) > 0);
}
function isAnagram($a, $b) {
return letterize($a) == letterize($b);
}
function letterize($a) {
$array = str_split(str_replace(' ', '', strtolower($a)));
sort($array);
return join($array);
}
$states = array('Alabama','Alaska','Arizona','Arkansas','California','Colorado',
'Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois',
'Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland',
'Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana',
'Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York',
'North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania',
'Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah',
'Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming');
$doubleStates = array();
for ($i = 0, $max = count($states); $i < $max; $i++) {
for ($j = $i + 1; $j < $max; $j++) {
$doubleStates[] = $states[$i] . $states[$j];
}
}
findAnagrams($doubleStates);
所以最大的问题是你把各州连接在一起的方式。在您要匹配的州列表中,您正在匹配阿拉巴马州阿拉斯加州和阿拉斯加州阿拉巴马州。所以一件好事就是只匹配唯一的两个状态组合
$doubleStates = array();
for ($i = 0, $max = count($states); $i < $max; $i++) {
// The first loop starts from the first element of the array
for ($j = $i + 1; $j < $max; $j++) {
// The second loop starts from the next element of the first loop
$doubleStates[] = $states[$i] . $states[$j];
}
}
$doubleStates=array();
对于($i=0,$max=count($states);$i<$max;$i++){
//第一个循环从数组的第一个元素开始
对于($j=$i+1;$j<$max;$j++){
//第二个循环从第一个循环的下一个元素开始
$doubleStates[]=$states[$i]。$states[$j];
}
}
我可能不应该为您编写所有的代码,但我被迷住了:
<?php
function findAnagrams($array) {
do {
$matcher = null;
$matches = array();
foreach ($array as $key => $val) {
if (is_null($matcher)) {
unset($array[$key]);
$matcher = $val;
} elseif (isAnagram($matcher, $val)) {
if (empty($matches)) {
$matches[] = $matcher;
}
$matches[] = $val;
}
}
if (count($matches) > 0) {
print_r($matches);
echo "<br >";
}
} while (count($array) > 0);
}
function isAnagram($a, $b) {
return letterize($a) == letterize($b);
}
function letterize($a) {
$array = str_split(str_replace(' ', '', strtolower($a)));
sort($array);
return join($array);
}
$states = array('Alabama','Alaska','Arizona','Arkansas','California','Colorado',
'Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois',
'Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland',
'Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana',
'Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York',
'North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania',
'Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah',
'Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming');
$doubleStates = array();
for ($i = 0, $max = count($states); $i < $max; $i++) {
for ($j = $i + 1; $j < $max; $j++) {
$doubleStates[] = $states[$i] . $states[$j];
}
}
findAnagrams($doubleStates);
这个清理得很好,谢谢。不过,其他比赛呢?它似乎停得太早了。例如…南达科他州和北卡罗莱纳州?是的,南达科他州/北卡罗莱纳州-北达科他州/南卡罗来纳州是最后的选择再次感谢。我花了相当多的时间尝试获取每种可能的结果(包括原始字符串和它的反向),将它们放入数组中,然后过滤掉重复的结果。不用说,我还没把它用到工作上。这很干净,谢谢。不过,其他比赛呢?它似乎停得太早了。例如…南达科他州和北卡罗莱纳州?是的,南达科他州/北卡罗莱纳州-北达科他州/南卡罗来纳州是最后的选择再次感谢。我花了相当多的时间尝试获取每种可能的结果(包括原始字符串和它的反向),将它们放入数组中,然后过滤掉重复的结果。不用说,我还没有让它发挥作用。