Новый комментарий

Bogdan 29.01.2020 в 14:33
 private function compare(string $string, string $compareWith): bool
 {
     $reg = '/^[a-z]+$|^[а-я]+$/m';

     if (!\preg_match($reg, $string)
         || !\preg_match($reg, $compareWith)
         || (\mb_strlen($string) !== \mb_strlen($compareWith))
     ) {
         return false;
     }

     $splitCompare = \str_split($compareWith);
     foreach (\str_split($string) as $char) {
         $key = \array_search($char, $splitCompare);
         if (empty($key)) {
             return false;
         }
         unset($splitCompare[$key]);
     }

     return true;
 }
Bogdan 31.01.2020 в 14:45

через сафари нельзя обновить комментарий)

alegkonin 29.01.2020 в 14:50
Function str(string $a,string $b){
    If (mb_strlen($a)!= mb_strlen($b)){return false;}
    $count = 0;
    $strlen = mb_strlen($a);
    $b = str_split($b);

    for($i=0;$i<$strlen;$i++){
        foreach ($b as $key => $val){
            If($a[$i] === $val){
            $count++;
            }
        }
    }
   If ($count === $strlen){ return true;
   }
   Return false;
}
[email protected] 31.01.2020 в 14:12

дополнительный комментарий к Bogdan: будет баг ( вернет true ) если строка arrr будет сравниваться с rraa|rrra|raaa...

Petrovich 02.02.2020 в 03:45
<?php

$word1 = 'привет';
$word2 = 'првите';

function isitananagram($word1, $word2)
{
    $letter1 = str_split($word1);//переменная $word1 становится массивом
    $letter2 = str_split($word2);//переменная $word2 становится массивом
    natsort($letter1);//сортируем буквы по алфавиту
    natsort($letter2);//сортируем буквы по алфавиту
    $letter1 = array_values($letter1);//перезаписываем ключи массива $letter1
    $letter2 = array_values($letter2);//перезаписываем ключи массива $letter2

    if($letter1 === $letter2) // сравниваем массивы
    {
        return true;
    }
    return false;
}
echo isitananagram($word1,$word2);
Bogdan 05.02.2020 в 18:42

интересное решение )), если еще упростить то можно было сделать

function isitananagram($word1, $word2)
{
    $letter1 = str_split($word1);//переменная $word1 становится массивом
    $letter2 = str_split($word2);//переменная $word2 становится массивом
    natsort($letter1);//сортируем буквы по алфавиту
    natsort($letter2);//сортируем буквы по алфавиту
    $letter1 = array_values($letter1);//перезаписываем ключи массива $letter1
    $letter2 = array_values($letter2);//перезаписываем ключи массива $letter2

    return $letter1 === $letter2
}
function isitananagram($word1, $word2)
{
    $letter1 = str_split($word1);//переменная $word1 становится массивом
    $letter2 = str_split($word2);//переменная $word2 становится массивом
    natsort($letter1);//сортируем буквы по алфавиту
    natsort($letter2);//сортируем буквы по алфавиту

    return empty(array_diff($letter1, $letter2))
}
function isitananagram($word1, $word2)
{
    return empty(array_diff(natsort(str_split($word1)), natsort(str_split($word2))))
}
Petrovich 05.02.2020 в 18:50

да, как вариант)

Ichi 31.07.2020 в 20:45
<?php

function strSort(string $str): string
{
    $arr = str_split($str);
    sort($arr);
    return implode('', $arr);
}

function anagram(string $str1, string $str2): bool
{
    if (strlen($str1) <> strlen($str2)) {
        return false;
    }

    // не учитывая регистр
    // return (strSort($str1) === strSort($str2));
    // учитывая регистр
    return (strcmp(strSort($str1), strSort($str2)) !== 0);
}

echo '<pre>';
echo 'night - thing';
var_dump(anagram('night', 'thing'));
echo 'cat - act';
var_dump(anagram('cat', 'act'));
echo 'save - vase';
var_dump(anagram('save', 'vase'));
echo 'stressed - desserts';
var_dump(anagram('stressed', 'desserts'));

echo 'save - sale'; // (отличие в буквах v и l)
var_dump(anagram('save', 'sale'));
echo 'save - ave '; //(отсутствие буквы s во втором слове)
var_dump(anagram('save', 'ave'));
echo 'saaa - ssaa'; // (разное количество букв s и a в словах)
var_dump(anagram('saaa', 'ssaa'));

echo 'замоК - казом'; // (разное количество букв s и a в словах)
var_dump(anagram('замоК', 'замоК'));
echo 'зем - емз'; // (разное количество букв s и a в словах)
var_dump(anagram('зем', 'емз'));

echo '</pre>';
ivashkevich 02.08.2020 в 17:32
strlen($str1) <> strlen($str2)

<> - вы где это откопали?)

Ichi 02.08.2020 в 18:00

ну он используется в SQL, да и все остальные языки его понимают. Если я правильно помню, то он ещё в Pascal использовался (там не было !=). Так что по привычке пишут так.

ivashkevich 02.08.2020 в 19:02

Не надо по привычке, надо правильно) пишите !==

Ichi 02.08.2020 в 21:14

правильно оба варианта

$a != $b    Not equal   TRUE if $a is not equal to $b after type juggling.
$a <> $b    Not equal   TRUE if $a is not equal to $b after type juggling.

https://www.php.net/manual/en/language.operators.comparison.php

ivashkevich 05.08.2020 в 08:03

!== а не !=

[email protected] 19.08.2020 в 00:31

Что думаете про такой вариант решения?

$string1 = trim(fgets(STDIN));
$string2 = trim(fgets(STDIN));

function isAnagram($string1, $string2)
{
    if (count_chars($string1, 1) !== count_chars($string2, 1))  {
        echo "no";
    } else {
        echo "yes";
    }    
}

isAnagram($string1, $string2);

можно ещё сократить, но тогда придётся напрягаться при чтении )))

ivashkevich 19.08.2020 в 17:54

с юникодом не сработает, а так норм

Логические задачи с собеседований