检查一个句子是否向前和向后相同

时间:2017-11-20 01:33:33

标签: java

我试图检查一个句子是向前和向后是一样的还是一个“句子回文”。句子“你可以笼住燕子,不能你,但你不能吞下笼子,可以吗?”应该作为回文返回。忽略一切不是字母的东西。

我的代码:我知道有一些额外的部分是不必要的,但我试图测试不同的东西。在我弄清楚如何让它工作之后,我会缩短和优化。第一个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); 
   }

1 个答案:

答案 0 :(得分:0)

Deque<Character>更改为Deque<String>。然后,您可以向Deque添加一个单词。