我必须编写一个脚本来检查用户输入的单词是否是回文结构。我已经验证了这个词并显示了字符数。也不应该使用反向方法。
我已经查看了一些示例,并认为我需要将用户输入转换为字符串并使用“for”循环和if / else语句。但是如何将用户输入转换为字符串以检查每个字符?这是一个完全混乱,但这是我到目前为止所有:
function checkWord(userWord3) {
var answer = "Your word is";
answer += retrieveWord(userWord3);
return (answer);
}
function retrieveWord(userWord) {
var string = userWord;
var i = userWord.length;
for(var i = 0; i < str.length / 2; i++) {
alert(str[i], str[str.length -i -1]);
if( str[i] != str[str.length - i -1] ) {
return false;
}
}
}
答案 0 :(得分:1)
您可以尝试此功能
function isPalindrome(str){
if(str.length < 2) return true;
if(str[0] != str.slice(-1)) return false;
return isPalindrome(str.slice(1,-1));
}
它使用递归,其逻辑如下 空的和1个字符的字符串被认为是回文
if(str.length == 0 || str.length == 1) return true;
如果第一个和最后一个字符不相同,则该字不是回文
if(str[0] != str.slice(-1)) return false;
如果第一个和最后一个相同,则继续搜索剩余的字符串
return isPalindrome(str.slice(1,-1));
var result = document.querySelector(".result");
var palindrome = "<span class='palindrome'>it is a palindrome</span>";
var notpalindrome = "<span class='notpalindrome'>it is NOT a palindrome</span>";
function isPalindrome(str){
if(str.length == 0 || str.length == 1) return true;
if(str[0] != str.slice(-1)) return false;
return isPalindrome(str.slice(1,-1));
}
document.querySelector("input").addEventListener("keyup", function(){
if(isPalindrome(this.value)){
result.innerHTML = palindrome;
} else {
result.innerHTML = notpalindrome;
}
})
&#13;
.palindrome{color: green;}
.notpalindrome{color: red;}
&#13;
<input type="text" />
<span class="result"></span>
&#13;
答案 1 :(得分:0)
您是如何收集用户输入的?几乎在每种情况下,它都会作为一个字符串(即文本框,提示符)进入程序,因此您不必担心将其转换为一个。
这段代码只需要单词,将其分解为数组,反转数组,然后将该反转与原始单词进行比较。它对我有用:
function test(input){
var originalData = input;
var a = [];
for(var i = 0; i < input.length; ++i){
a.push(input.charAt(i));
}
a.reverse();
return (a.join('') === originalData) ? true : false;
}
var word = document.getElementById("userWord");
alert(test(word));
上的工作版本
答案 2 :(得分:0)
我能想到的最基本的版本是将单词分成字母并检查第一个字母,直到你最后在中间,如果有一个奇数字母就没关系。< / p>
更新我已经测试了各种实现的性能,并将基于数组的回答改为基于纯字符串的解决方案。 如果你很好奇,here are the performance benchmarks
最快的解决方案(到目前为止):
function palindrome(word) {
var middle = Math.ceil(word.length / 2), // determine the middle
i; // prepare the iteration variable
// loop from 0 to middle
for (i = 0; i <= middle; ++i) {
// check letter i against it counterpart on the opposite side
// of the word
if (word[i] !== word[(word.length - 1) - i]) {
// it is not a palindrom
return false;
}
}
// otherwise it is
return true;
}
// listen for clicks on the button and send the entered value to the palindrom function
document.querySelector('button').addEventListener('click', function(e) {
// obtain the input element
var element = document.querySelector('input');
// add/remove the 'palindrom' CSS class to the input field, depending on
// the output of palindrome function
if (palindrome(element.value)) {
element.classList.add('palindrome');
}
else {
element.classList.remove('palindrome');
}
});
input {
color: red;
}
input.palindrome {
color: green;
}
<input name=check placeholder=palindrome><button>check</button>
如果您已成功输入回文,则文本变为绿色,否则为红色(默认)。