我试图检查一个句子是向前和向后是一样的还是一个“句子回文”。句子“你可以笼住燕子,不能你,但你不能吞下笼子,可以吗?”应该作为回文返回。忽略一切不是字母的东西。
我的代码:我知道有一些额外的部分是不必要的,但我试图测试不同的东西。在我弄清楚如何让它工作之后,我会缩短和优化。第一个for循环读取字符并将它们放入两个不同的队列和一个堆栈中。在我有一个名为reverseWords2的方法之后,它接受字符串中的单词并以相反的顺序打印它们。
我的问题:使用我目前拥有的代码,一切都返回true。我的想法是将字符放入q和q2,然后翻转q2的单词,然后比较两者就可以了。有一些问题,我不知道如何解决它。
更新:将我的q改为双尾q。现在我只需要找出正确比较单词而不仅仅是字母。建议?
我的代码:
public static boolean isWordPalindrome(String input) {
Deque<Character> q = new LinkedList<>( );
Deque<Character> q2 = new LinkedList<>( );
Queue<Character> q3 = new LinkedList<>( );
Stack<Character> s = new Stack<>( );
Stack<Character> throwaway = new Stack<>();
Character letter; // One character from the input string
int mismatches = 0; // Number of spots that mismatched
int i; // Index for the input string
int x;
for (i = 0; i < input.length( ); i++)
{
letter = input.charAt(i); // read next character in the string
if (letter.toString().equals(',') || letter.toString().equals('"') || letter.toString().equals('?') || letter.toString().equals('!') || letter.toString().equals('.')) {
throwaway.add(letter); //ignore above chars and put in throwaway stack
}
if (Character.isLetter(letter) || letter.toString().equals(' ')) // if letter or space
{
q.add(letter);
q2.add(letter);
s.push(letter);
}
} // end of for loop
reverseWords2(q2.toString()); // reverse the words of q2
while (!q.isEmpty( ))
{
if (!Objects.equals(q.remove(), q2.removeLast()))
mismatches++;
}
// If there were no mismatches, then the string was a palindrome.
return (mismatches == 0);
}
答案 0 :(得分:0)
将Deque<Character>
更改为Deque<String>
。然后,您可以向Deque
添加一个单词。