-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpodpalindrom.php
More file actions
64 lines (64 loc) · 2.59 KB
/
podpalindrom.php
File metadata and controls
64 lines (64 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(E_ALL);
//$src_str = "Аргентина - манит негра";
//$src_str = "Пол-негра";
//$src_str = "Она в аду давно.";
$src_str = "'Пустите же!' - Летит супу миска Максиму. -
'Пустите же, летит суп!'";
//$src_str = "Sum, summus - mus";
$str_encoding = mb_detect_encoding($src_str);
if ($str_encoding == "UTF-8" ) {
$str = mb_strtolower($src_str, $str_encoding);
} else {
$str = strtolower($src_str);
}
$str=str_replace(" ", "", $str);
if ($str_encoding == "UTF-8") {
$str=preg_replace("/[^а-я]/u", "", $str);
$len_str = mb_strlen($str);
$str_rev = utf8_strrev($str);
} else {
$str=preg_replace("/[^a-z]/", "", $str);
$len_str = strlen($str);
$str_rev = strrev($str);
}
if (strcmp($str, $str_rev) == 0) {
echo 'а) если строка является палиндромом,
то она выводится полностью:'.'<br>'.$src_str.'<br>'.$str_rev.'<br>';
} else {
$max_result = "";
$len_strf = (($str_encoding == "UTF-8") ? $len_str/2 : $len_str);
for ($k = 0; ($k+1) < $len_strf; ++$k) {
for ($i = 0; ($i+1) < ($len_strf-$k); ++$i) {
$target_str = mb_substr($str, $k, ($len_strf - $i - $k), $str_encoding);
$str_rev = utf8_strrev($target_str);
if (strcmp($target_str, $str_rev) == 0) {
if ($str_encoding == "UTF-8") {
if (mb_strlen($target_str) > mb_strlen($max_result)) {
$max_result = $target_str;
}
} else {
if (strlen($target_str) > strlen($max_result)) {
$max_result = $target_str;
}
}
}
}
}
}
if ($max_result != "") {
echo 'б) если строка не является палиндромом - выводится
самый длинный подпалиндром этой строки, т.е. самая длинная
часть строки, являющаяся палиндромом: '.
'<br>'.$src_str.'<br>'.$max_result.'<br>';
} else {
echo 'в) если подпалиндромы отсутствуют в строке -
выводится первый символ строки.'.'<br>'.
'<br>'.$src_str.'<br>'.mb_substr($src_str, 0, 1, $str_encoding);
}
function utf8_strrev($str_function)
{
preg_match_all('/./us', $str_function, $str_array);
return join('', array_reverse($str_array[0]));
}