如何删除所有非字母字符,javascript
How to remove all non-alphabet characters, javascript
我被要求检查一个字符串是否是回文。
不区分大小写。忽略所有不是字母的字符。
我的回答
function palindrome(str) {
var oldStr = str.toLowerCase().replace(/\s+|\,|\.|\_|\-|\:|\(|\)|\/|\/g, '');
var newStr = str.replace(/\s+|\,|\.|\_|\-|\:|\(|\)|\/|\/g, '').split("").reverse().join("").toLowerCase();
if ( oldStr === newStr){
return true;
}
else {
return false;
}
}
palindrome("ininiNI");
该函数将检查任何字符串的可能性。
例子: (0_0 (: /-\ :) 0-0") 根据要求应该return true.
我在 JavaScript 中找不到比上面那个更好的解决方案。
除了将每个可能的字符写成 removed/replaced 之外,还有 faster/better 方法吗? (特别是因为我写的内容远非详尽无遗...)
无需调用 toLowerCase() 和 replace() 两次。您也可以将字符串切成两半,反转一部分然后进行比较。这样你至少可以加快你的功能几倍。
优化后的函数可能是这样的:
function palindrome(str) {
str = str.toLowerCase().replace(/[^a-z]/g, '');
var max = str.length - 1;
for (var i = Math.floor(max / 2); i >= 0; i--) {
if (str[i] != str[max - i]) {
return false;
}
}
return true;
}
palindrome("inabcbani"); //true
palindrome("abcddcba"); //true
palindrome("a*#$(b)&^@%@%(*a"); //true
palindrome("abba"); //true
palindrome("abcdba"); //false
在我看来,For 循环将是最快的方法,因为它既快速又简单。一旦找到第一个不匹配的字符,您可以 return false。
我被要求检查一个字符串是否是回文。 不区分大小写。忽略所有不是字母的字符。
我的回答
function palindrome(str) {
var oldStr = str.toLowerCase().replace(/\s+|\,|\.|\_|\-|\:|\(|\)|\/|\/g, '');
var newStr = str.replace(/\s+|\,|\.|\_|\-|\:|\(|\)|\/|\/g, '').split("").reverse().join("").toLowerCase();
if ( oldStr === newStr){
return true;
}
else {
return false;
}
}
palindrome("ininiNI");
该函数将检查任何字符串的可能性。 例子: (0_0 (: /-\ :) 0-0") 根据要求应该return true.
我在 JavaScript 中找不到比上面那个更好的解决方案。
除了将每个可能的字符写成 removed/replaced 之外,还有 faster/better 方法吗? (特别是因为我写的内容远非详尽无遗...)
无需调用 toLowerCase() 和 replace() 两次。您也可以将字符串切成两半,反转一部分然后进行比较。这样你至少可以加快你的功能几倍。
优化后的函数可能是这样的:
function palindrome(str) {
str = str.toLowerCase().replace(/[^a-z]/g, '');
var max = str.length - 1;
for (var i = Math.floor(max / 2); i >= 0; i--) {
if (str[i] != str[max - i]) {
return false;
}
}
return true;
}
palindrome("inabcbani"); //true
palindrome("abcddcba"); //true
palindrome("a*#$(b)&^@%@%(*a"); //true
palindrome("abba"); //true
palindrome("abcdba"); //false
在我看来,For 循环将是最快的方法,因为它既快速又简单。一旦找到第一个不匹配的字符,您可以 return false。