3.1 Valid Palindrome
描述
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring
cases.
For example,
”A man, a plan, a canal: Panama” is a palindrome.
”race a car” is not a palindrome.
Note: Have you consider that the string might be empty? This is a good question to ask during an
interview.
描述
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring
cases.
For example,
”A man, a plan, a canal: Panama” is a palindrome.
”race a car” is not a palindrome.
Note: Have you consider that the string might be empty? This is a good question to ask during an
interview.
For the purpose of this problem, we define empty string as valid palindrome.
function isNums($str)
{
$pattern='/^[0-9a-zA-Z]$/';
if(preg_match($pattern,$str))
return true;
return false;
}
function isparma2($str)
{
if(empty($str)) return false;
$n=strlen($str);
$i=0;$j=$n-1;
while($i<$j)
{
if(!isNums($str[$i]))
$i++;
else if(!isNums($str[$j]))
$j--;
else if($str[$i]!=$str[$j])
return false;
else{
$i++;
$j--;
}
}
return true;
}
3.5 Longest Palindromic Substring
描述
Given a string S, find the longest palindromic substring in S. You may assume that the maximum
length of S is 1000, and there exists one unique longest palindromic substring.
求最长的回文子串:经典的字符串编程题,可以采用动态规划来做。
动态规划重点在于动态方程的建立:
$dp[$i][$j]表示字符串从$i到$j之间是否是回文;
$dp[$i][$j]
当$str[$i] != $str[$j] $dp[$i][$j]=false;
当$str[$i]==$str[$j] $dp[$i][$j]=$j<$i+2||$dp[$i+1][$j-1]
function longPa($str)
{
if(empty($str)) return -1;
$n=strlen($str);
$dp=array_fill( 0 ,n ,array_fill( 0 ,n ,false));
$start=0;
$maxlen=0;
for($i=$n-1;$i>=0;$i--)
{
for($j=$i+1;$j<$n;$j++){
if($str[$i]==$str[$j]&&($j<$i+2||$dp[$i+1][$j-1])) {
$ dp[$i][$j]=true;
if($maxlen<$j-$i+1){
$maxlen=$j-$i+1;
$start=$i;
}
}else{
$dp[$i][$j]=false;
}
}
}
return substr($str,$start,$maxlen);
}