Open In App

Print all funny words in a string

Last Updated : 22 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

We are given a sentence. Our task is to print all funny words/strings in that sentence.

What is a funny word ?

Reverse the given string. Iterate through each character of that string, compare the absolute difference in the ASCII values of the characters at positions 0 and 1, 1 and 2, 2 and 3 and so on to the end. If the list of absolute differences is the same for both strings, they are funny otherwise not. 

Examples: 

Input  : HKMNPS
Output : HKMNPS
Explanation:
Let r be the reverse of original string s
s = “HKMNPS”
r = “SPNMKH”  
|H-K| = 3  = |S-P|         
|K-M| = 2  = |P-N|     
|M-N| = 1  = |N-M|
|N-P| = 2  = |M-K|
|P-S| = 3  = |K-H|
Since each comparison is equal so given string is funny

Input : bdwy 
Output :  bdwy

NOTE: Every palindrome string is a funny string but not vice-versa.

The idea is to split the string into words. For every word, traverse it from both ends and compare differences between adjacent characters. 

Implementation:

C++




// C++ program to print all
// funny words in a string
#include <bits/stdc++.h>
using namespace std;
 
bool checkFunny(string word)
{
    int i = 1;
    int j = word.length() - 2;
    for (int i = 0; i < word.length(); i++)
        word[i] = tolower(word[i]);
 
    while (i <= j) {
        if (abs(word[i] - word[i - 1])
            != abs(word[j] - word[j + 1]))
            return false;
        i++;
        j--;
    }
    return true;
}
 
void printFunnyWords(string str)
{
 
    // to extract last word of sentence
    str += " ";
 
    // to word stores each word of sentence
    string word = "";
 
    for (int i = 0; i < str.length(); i++) {
        char ch = str[i];
 
        // extracting each word
        if (ch != ' ')
            word += ch;
        else {
            if (checkFunny(word))
                cout << word << endl;
            word = "";
        }
    }
    if (word != "") {
        if (checkFunny(word))
            cout << word << endl;
    }
}
 
// Driver Code
int main()
{
    printFunnyWords(
        "Miss Arora teaches us malayalam bdwy");
 
    return 0;
}
 
// This code is contributed by
// sanjeev2552


Java




import java.util.*;
import java.io.*;
class Funny {
    static boolean checkFunny(String word)
    {
        int i = 1;
        int j = word.length() - 2;
        word = word.toLowerCase();
        while (i <= j) {
            if ((Math.abs(word.charAt(i) - word.charAt(i - 1))) !=
                   Math.abs((word.charAt(j) - word.charAt(j + 1))))
                return false;
            i++;
            j--;
        }
        return true;
    }
 
    static void printFunnyWords(String str)
    {
        // to extract last word of sentence
        str = str + " ";
 
        // to word stores each word of sentence
        String word = "";
 
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
 
            // extracting each word
            if (ch != ' ')
                word = word + ch;
            else {
                if (Funny.checkFunny(word))
                    System.out.println(word);
                word = "";
            }
        }
    }
 
    public static void main(String[] args)
    {
        Funny.printFunnyWords("Miss Arora teaches us malayalam bdwy ");
    }
}


Python3




# Python program to print all funny words in a string
def checkFunny(word):
    i = 1
    j = len(word) - 2
    word = word.lower()
     
    while (i <= j):
        if ((abs(ord(word[i]) - ord(word[i - 1])))
           != abs((ord(word[j]) - ord(word[j + 1])))):
            return False
        i = i + 1
        j = j - 1
    return True
     
def printFunnyWords(str):
 
    # to extract last word of sentence
    str = str + " "
 
    # to word stores each word of sentence
    word = ""
    i = 0
    for i in range(len(str)):
        ch = str[i]
 
        # extracting each word
        if (ch != ' '):
            word = word + ch
        else:
            if (checkFunny(word)):
                print (word)
            word = ""
 
# Driver code
printFunnyWords("Miss Arora teaches us malayalam bdwy ")
 
# This code is contributed by Prateek Bajaj


C#




// C# program to print funny string
using System;
 
class GFG
{
public static bool checkFunny(string word)
{
    int i = 1;
    int j = word.Length - 2;
    word = word.ToLower();
    while (i <= j)
    {
        if ((Math.Abs(word[i] -
                      word[i - 1])) != Math.Abs((word[j] -
                                                 word[j + 1])))
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}
 
public static void printFunnyWords(string str)
{
    // to extract last word of sentence
    str = str + " ";
 
    // to word stores each word of sentence
    string word = "";
 
    for (int i = 0; i < str.Length; i++)
    {
        char ch = str[i];
 
        // extracting each word
        if (ch != ' ')
        {
            word = word + ch;
        }
        else
        {
            if (GFG.checkFunny(word))
            {
                Console.WriteLine(word);
            }
            word = "";
        }
    }
}
 
// Driver Code
public static void Main(string[] args)
{
    GFG.printFunnyWords("Miss Arora teaches us " +
                               "malayalam bdwy ");
}
}
 
// This code is contributed by Shrikant13


Javascript




<script>
 
// Javascript pprogram to print all
// funny words in a string
 
function checkFunny(word)
{
    var i = 1;
    var j = word.length - 2;
    word= (word.toLowerCase());
 
    while (i <= j)
    {
        if (Math.abs(word[i].charCodeAt(0) -
                word[i - 1].charCodeAt(0)) !=
                    Math.abs(word[j].charCodeAt(0) -
                                    word[j + 1].charCodeAt(0)))
            return false;
        i++;
        j--;
    }
    return true;
}
 
function printFunnyWords(str)
{
     
    // to extract last word of sentence
    str += " ";
 
    // to word stores each word of sentence
    var word = "";
 
    for (var i = 0; i < str.length; i++)
    {
        var ch = str[i];
 
        // extracting each word
        if (ch != ' ')
            word += ch;
        else
        {
            if (checkFunny(word))
                document.write( word + "<br>");
            word = "";
        }
    }
}
 
// Driver Code
printFunnyWords("Miss Arora teaches us malayalam bdwy ");
 
</script>


Output

Arora
us
malayalam
bdwy

Time Complexity: O(|s|)
Auxiliary Space: O(|s|), where |s| is the length of the string.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads