📜  从给定句子中删除所有回文词

📅  最后修改于: 2022-05-13 01:57:08.973000             🧑  作者: Mango

从给定句子中删除所有回文词

给定一个句子str 。问题是从给定句子中删除所有回文词。
例子:

Input : str = "Text contains malayalam and level words"
Output : Text contains and words

Input : str = "abc bcd"
Output : abc bcd

方法:将所有单词一一提取。检查当前单词是否不是回文,然后将其添加到最终字符串中。
算法:

removePalinWords(str, n)
    Initialize final_str = "", word = ""
    str = str + " "
    
    for i = 0 to n-1
        if str[i] != ' ', then
        word = word + str[i]
    else 
        if (!(isPalindrome(word)), then
            final_str += word + " "
        word = ""
            
    return final_str

isPalindrome()函数用于检查给定字符串是否为回文。参考这篇文章。

C++
// C++ implementation to remove all the
// palindromic words from the given sentence
#include 
using namespace std;
 
// function to check if 'str' is palindrome
bool isPalindrome(string str) {
  int i = 0, j = str.size() - 1;
 
  // traversing from both the ends
  while (i < j)
 
    // not palindrome
    if (str[i++] != str[j--])
      return false;
 
  // palindrome
  return true;
}
 
// function to remove all the palindromic words
// from the given sentence
string removePalinWords(string str) {
 
  // 'final_str' to store the final string and
  // 'word' to one by one store each word of 'str'
  string final_str = "", word = "";
 
  // add space at the end of 'str'
  str = str + " ";
  int n = str.size();
 
  // traversing 'str'
  for (int i = 0; i < n; i++) {
 
    // accumulating characters of the current word
    if (str[i] != ' ')
      word = word + str[i];
 
    else {
 
      // if 'word' is not palindrome then a
      // add it to 'final_str'
      if (!(isPalindrome(word)))
        final_str += word + " ";
 
      // reset
      word = "";
    }
  }
 
  // required final string
  return final_str;
}
 
// Driver program to test above
int main() {
  string str = "Text contains malayalam and level words";
  cout << removePalinWords(str);
  return 0;
}


Java
// Java implementation to remove all the
// palindromic words from the given sentence
 
class GFG
{
    // function to check if 'str' is palindrome
    static boolean isPalindrome(String str)
    {
        int i = 0, j = str.length() - 1;
         
        // traversing from both the ends
        while (i < j)
        {
            // not palindrome
            if (str.charAt(i++) != str.charAt(j--))
            return false;
        }
        // palindrome
        return true;
    }
     
    // function to remove all the palindromic words
    // from the given sentence
    static String removePalinWords(String str)
    {
     
        // 'final_str' to store the final string and
        // 'word' to one by one store each word of 'str'
        String final_str = "", word = "";
         
        // add space at the end of 'str'
        str = str + " ";
        int n = str.length();
         
        // traversing 'str'
        for (int i = 0; i < n; i++)
        {
         
            // accumulating characters of the current word
            if (str.charAt(i) != ' ')
            word = word + str.charAt(i);
         
            else
            {
         
                // if 'word' is not palindrome then a
                // add it to 'final_str'
                if (!(isPalindrome(word)))
                    final_str += word + " ";
             
                // reset
                word = "";
            }
        }
         
        // required final string
        return final_str;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        String str = "Text contains malayalam and level words";
    System.out.print(removePalinWords(str));
    }
}
 
// This code is contributed by Anant Agarwal.


Python3
# Python3 implementation to remove all the
# palindromic words from the given sentence
 
# function to check if 'str' is palindrome
def isPalindrome(string) :
    i = 0; j = len(string) - 1;
 
    # traversing from both the ends
    while (i < j) :
     
        # not palindrome
        if (string[i] != string[j]) :
            return False;
        i += 1;
        j -= 1;
     
    # palindrome
    return True;
 
# function to remove all the palindromic words
# from the given sentence
def removePalinWords(string) :
 
    # 'final_str' to store the final string and
    # 'word' to one by one store each word of 'str'
    final_str = ""; word = "";
     
    # add space at the end of 'str'
    string = string + " ";
    n = len(string);
     
    # traversing 'str'
    for i in range(n) :
     
        # accumulating characters of the current word
        if (string[i] != ' ') :
            word = word + string[i];
     
        else :
     
            # if 'word' is not palindrome then a
            # add it to 'final_str'
            if (not (isPalindrome(word))) :
                final_str += word + " ";
         
            # reset
            word = "";
     
    # required final string
    return final_str;
     
# Driver Code
if __name__ == "__main__" :
     
    string = "Text contains malayalam and level words";
    print(removePalinWords(string));
 
# This code is contributed by AnkitRai01


C#
// C# implementation to remove all the
// palindromic words from the given sentence
using System;
 
class GFG {
     
    // function to check if 'str' is
    // palindrome
    static bool isPalindrome(string str)
    {
        int i = 0, j = str.Length - 1;
         
        // traversing from both the ends
        while (i < j)
        {
             
            // not palindrome
            if (str[i++] != str[j--])
            return false;
        }
         
        // palindrome
        return true;
    }
     
    // function to remove all the
    // palindromic words from the
    // given sentence
    static String removePalinWords(string str)
    {
     
        // 'final_str' to store the final
        // string and 'word' to one by one
        // store each word of 'str'
        string final_str = "", word = "";
         
        // add space at the end of 'str'
        str = str + " ";
        int n = str.Length;
         
        // traversing 'str'
        for (int i = 0; i < n; i++)
        {
         
            // accumulating characters of
            // the current word
            if (str[i] != ' ')
                word = word + str[i];
            else
            {
         
                // if 'word' is not palindrome
                // then a add it to 'final_str'
                if (!(isPalindrome(word)))
                    final_str += word + " ";
         
                // reset
                word = "";
            }
        }
         
        // required final string
        return final_str;
    }
     
    // Driver code
    public static void Main ()
    {
        string str = "Text contains malayalam "
                           + "and level words";
        Console.WriteLine(removePalinWords(str));
    }
}
 
// This code is contributed by vt_m.


Javascript


Python3
# Python program for the above approach
 
# Function which returns last word
def removePalindrome(string):
 
    # Split by space and converting
    # String to list and
    lis = list(string.split(" "))
 
    # length of list
    length = len(lis)
     
    # Taking new list
    newlis = []
     
    # loop till length of list
    for i in range(length):
       
        # check if the word is palindrome
        if(lis[i] != lis[i][::-1]):
            newlis.append(lis[i])
 
    return newlis
 
 
# Driver code
string = "Text contains malayalam and level words"
print(*removePalindrome(string))


输出
Text contains and words 

时间复杂度: O(n)。

方法2:使用内置Python函数:

  • 因为句子中的所有单词都用空格分隔。
  • 我们必须使用split() 将句子按空格分隔。
  • 我们用空格分割所有单词并将它们存储在一个列表中。
  • 循环直到列表中的单词数。
  • 获取一个新列表并附加非回文单词。
  • 打印新列表。

下面是实现

Python3

# Python program for the above approach
 
# Function which returns last word
def removePalindrome(string):
 
    # Split by space and converting
    # String to list and
    lis = list(string.split(" "))
 
    # length of list
    length = len(lis)
     
    # Taking new list
    newlis = []
     
    # loop till length of list
    for i in range(length):
       
        # check if the word is palindrome
        if(lis[i] != lis[i][::-1]):
            newlis.append(lis[i])
 
    return newlis
 
 
# Driver code
string = "Text contains malayalam and level words"
print(*removePalindrome(string))
输出
Text contains and words

时间复杂度: O(N)