回文算法

function cleanStr(str){
  // 过滤掉字符串中的所有空格、下划线
  var result = str.replace(/\s+/g,‘‘).replace(/\_+/g,‘‘).match(/\w/g).join(‘‘);
  // 过滤掉所有的标点符号, \w是匹配一个单字字符(字母,数字和下划线)
  // \W是匹配一个非单字字符, 当然包括标点符号了
  return result;
}

如果给定的字符串是回文,返回true,反之,返回false

palindrome(回文)是指一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样。

注意:您需要删除字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是不是回文。

函数参数的值可以为"racecar""RaceCar""race CAR"

function palindrome(str) {
// Good luck!
str = str.replace(/\s+/g,‘‘).replace(/\_+/g,‘‘).match(/\w/g).join(‘‘);
str = str.toLowerCase();
var  str1 = [];
var  str2 = [];

for(var i = 0;i<str.length;i++){
    str1.push(str[i]);
}
for(var j = 1;j<=str.length;j++){
    str2.push(str[str.length-j]);
}
for(var k = 0;k<=str1.length;k++){
    if(str1[k]!=str2[k]){
        return false;
    }
}
return true;
}

palindrome("1 eye for of 1 eye.");

原文地址:https://www.cnblogs.com/Gaohy/p/9967001.html

时间: 2024-08-29 02:19:07

回文算法的相关文章

回文算法的一种实现

刚刚想起来了一个以前的一个回文算法的问题.但是用的字符串,分成2部分,然后后边的翻转比较的.还得判断长度,然后分别处理(是否为2的整数倍). 现在想起来,这个使用折半的查找的思想.回文字符串,以中间轴,前后对称.那就直接原内容直接翻转,然后取得length/2+1的长度,和原串从头开始的同样数量的字符.一致就是回文算法,不一致就不是.回文的关键就是左右对称的,所以,只要比较一半就可以了.当然,使用栈比较也可以.综合考虑,简单,高效就好了. 回文算法的一种实现

「不会」回文算法

什么回文算法,我只会背两个板. 「双倍回文」 利用pam的fail树定义:一个节点的fail是他的最长回文后缀 那么在这棵树上dfs,记录沿路经过了哪些长度 那么到达长度为len的回文节点时,如果 len%4==0&&vis[len/2] 则作出贡献 「最长双回文串」 两个回文串拼起来的方案数,可以manacher 「I Love Palindrome String 」 reverse一下,那么问题变成长为len同时长为len/2的后缀也为回文串的数量 还是fail树 「Antisymme

MANACHER最长回文算法

博客已经搬家,请前往http://gqqnbig.me/ 阅读格式良好的文章. 本文将一步一步构造Manacher算法,心急的一定看不懂!请先练习下面的习题. 探索最长回文串性质 题1:已知字符串以center为中心对称,求完整的字符串. abcd??? | center 答 abcdcba | center 题2:接上题,abcdcba后面还有一些字符,以center2为中心,最大对称半径[ref]半径大于等于1.[/ref]为7,求完整的字符串. 答根据center2的对称性质,可以知道字符

最长回文算法2

问题: 求给定输入字符串的最长回文子序列(子序列不要求连续). 用LPS(i,j)表示从字符串第i个字符到第j个字符的最长回文子序列的长度,字符串的长度为n,则要求LPS(1,n),则: LPS(i,j)=0; i>j; LPS(i,j)=1; i==j; LPS(i,j)=LPS(i+1,j-1)+2; str[i]==str[j]; LPS(i,j)=max(LPS(i+1,j),LPS(i,j-1)); str[i]!=str[j]; // zuichanghuiwen2.cpp : 定义

算法练习3:回文算法

如果给定的字符串是回文,返回true,反之,返回false. palindrome(回文)是指一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样. 注意:您需要删除字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是不是回文. 使用的方法: replace() 方法返回一个由替换值替换一些或所有匹配的模式后的新字符串.模式可以是一个字符串或者一个正则表达式, 替换值可以是一个字符串或者一个每次匹配都要调用的函数.注意:原字符串不会改变. toLowerCase() 会将调

HDU 3068 最长回文 (manacher算法)

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9188    Accepted Submission(s): 3159 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组

【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】

背景 近期開始研究算法,于是在leetcode上做算法题,第五题Longest Palindromic Substring便是关于回文子串的. 什么是回文字串 回文字符串是指将该字符串前后颠倒之后和该字符串一样的字符串.比如:a,aaaa,aba,abba- 最长回文子串 要求最长回文子串,就须要遍历每个子串,时间复杂度是O(N2):推断字串是不是回文,时间复杂度是O(N),这种话算法的时间复杂度就是O(N3). 我刚開始想到的就是中心扩展法,代码例如以下: public static Stri

字符串(马拉车算法,后缀数组,稀疏表):BZOJ 3676 [Apio2014]回文串

Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. Input 输入只有一行,为一个只包含小写字母(a -z)的非空字符串s. Output 输出一个整数,为逝查回文子串的最大出现值. Sample Input [样例输入l] abacaba [样例输入2] www Sample Output [样例输出l] 7 [样例输出2] 4 HINT 一个串是回文的,当且仅当它从左

最长回文---hdu3068 (回文串 manacher 算法模板)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 manacher算法(复制大神的解释): 定义数组p[i]表示以i为中心的(包含i这个字符)回文串半径长 将字符串s从前扫到后for(int i=0;i<strlen(s);++i)来计算p[i],则最大的p[i]就是最长回文串长度,则问题是如何去求p[i]? 由于s是从前扫到后的,所以需要计算p[i]时一定