4

这是使用函数参数检查字符串是否为回文的 php 代码..帮我一步一步告诉我..这个过程发生了什么......我无法理解

function Palindrome($string) {

    if ((strlen($string) == 1) || (strlen($string) == 0)) {
        echo " STRING IS PALINDROME";
    }

    else {

        if (substr($string,0,1) == substr($string,(strlen($string) - 1),1)) {
            return Palindrome(substr($string,1,strlen($string) -2));
        }
        else { echo " STRING IS NOT A PALINDROME"; }
    }
}


Palindrome("121");
4

5 回答 5

3

此函数将字符串参数作为输入

它做的第一件事是检查递归基本情况。我们会回到那个

如果不满足基本情况,则使用以下代码检查第一个字符是否与最后一个字符匹配:

if (substr($string,0,1) == substr($string,(strlen($string) - 1),1))

如果匹配,则该函数再次递归调用自身,但这次删除了第一个和最后一个字符,这是通过这一行完成的

return Palindrome(substr($string,1,strlen($string) -2));

如果第一个字符与最后一个字符不匹配,该函数会自动输出到 html "STRING IS NOT A PALINDROME viaecho

现在回到我之前提到的基本情况,如果函数成功匹配并删除第一个和最后一个字符,直到剩下一个或没有字符,则该字符串已被确认为回文并回显该字符串。

如果您需要递归方面的帮助,请告诉我,我将发布教程链接

于 2013-06-21T13:26:34.513 回答
1

它使用递归。

该程序以这种方式工作。如果单词没有字母或只有一个字母,则它是回文。'a' 是回文,'' 也是

因此,您的程序将检查第一个字母是否与给定单词中的最后一个字母匹配。如果不是,它不是回文如果是,它将删除最后一个字母和第一个字母和最后一个字母并再次检查

所以当你说 121 1. 它会检查 1 和 1 是否匹配。所以它会用 2 2 调用相同的函数。然后它会删除 1 和 1 3。它会检查 2 4。因为 2 是一个字符,所以它是一个回文

如果你要阿爸

  1. 它将检查匹配的 a 和 a。所以它将调用与 bb 相同的函数
  2. 它将检查 b 和 b

如果你要求 phpcodephp

  1. 它将匹配 p 和 p。所以它将调用与 hpcodeph 相同的函数
  2. 它将匹配 h 和 h。所以它会用 pcodep 调用相同的函数
  3. 它将匹配 p 和 p。所以它会用代码调用相同的函数
  4. 它将匹配不匹配的 c 和 e。所以它不是回文
于 2013-06-21T13:24:16.677 回答
1

它使用递归函数来检查字符串是否为回文。首先,它通过 strlen() 函数检查字符串的长度是 1 还是 0。如果是,则直接返回“是”,否则它将检查第一个字母即 substr($string,0,1) 和最后一个字母即 substr($string,(strlen($string) - 1),1)。如果为真,那么它将递归地检查不包括第一个字母和最后一个字母的子字符串,即 Palindrome(substr($string,1,strlen($string) -2));。

于 2013-06-21T13:34:59.717 回答
0

该算法检查字符串的第一个和最后一个字母是否相等。如果是这种情况,算法会裁剪字符串的第一个和最后一个字母,并递归调用自身。这样,直到字符串为空(或只剩下一个字母) 例如字符串“blaalb” 该算法使用回文(“blaalb”)调用。如您所见,第一个和最后一个字母相同(“b”),因此这些字母被裁剪。(如果不是,则该字符串将不是回文并且将返回“STRING IS NOT A PALINDROME”)算法现在使用 Palindrome("laal") 调用自身。同样,“l”被裁剪,然后“a”不是字符串为空,“STRING IS A PALINDROME”被返回。请记住,例如“blaxalb”也是回文,

于 2013-06-21T13:26:56.243 回答
0

利用

function Palindrome($string) {
    return strrev($string) === $string;
}

var_dump(Palindrome("121"));

您的函数检查长度,如果它是 0 或 1,则它必须是回文。

然后它将第一个字母与最后一个字母进行比较。如果它们是相同的,则将两者都取消重复。

所以打了 121

121 不等于 0 或 1 个字符长,

检查第一个等于最后一个。1 = 1

删除两个 1 离开 2

以 2 作为参数重新启动。

2 等于 0 或 1 个字符长,

返回字符串是回文。

我发布的功能是一种更容易检查的方法

于 2013-06-21T13:22:44.783 回答