如何检查一个字符串是否是另一个字符串的重新排序?

时间:2018-07-17 21:21:54

标签: php algorithm

如果我有两个字符串,例如“ 123456789”和“ 135792468”,并且我想知道它们是否相互重新排序,那么在PHP中是否有像function is_reorder(str1, str2)这样的函数可以在其中输入{ {1}}并返回is_reorder(123456789, 135792468),因为123456789只是135792468,但是顺序不同?

如果没有内置功能,该怎么办?

2 个答案:

答案 0 :(得分:2)

这是一种方法:

$string1 = '123456789';
$string2 = '135792468';

$stringParts1 = str_split($string1);
sort($stringParts1);

$stringParts2 = str_split($string2);
sort($stringParts2);

if($stringParts1 == $stringParts2){
echo 'strings are a reorder';
}else{
echo 'strings are not a reorder'; 
};

这是将字符串分开,然后按字母顺序对字符进行排序,然后进行比较。 Here's an example

编辑:implode()函数已删除,因为不必要。

答案 1 :(得分:1)

对两个字符串进行排序,然后进行比较以查看两者是否相等-如果它们相等,则这些字符串将彼此重新排序。据我所知,在php中没有内置函数。即使有,我也会保证使用排序。

任何标准排序算法都可以。现在,如果您想提高效率,可以使用计数排序对O(n)的字符串进行排序,这样您甚至可以使用快捷方式-计算每个字符的出现频率,并尝试比较两个字符中每个字符的出现次数字符串是否相等。