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 funnyInput : 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 Codeint 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 stringdef 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 codeprintFunnyWords("Miss Arora teaches us malayalam bdwy ")# This code is contributed by Prateek Bajaj |
C#
// C# program to print funny stringusing 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 Codepublic 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 stringfunction 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 CodeprintFunnyWords("Miss Arora teaches us malayalam bdwy ");</script> |
Arora us malayalam bdwy
Time Complexity: O(|s|)
Auxiliary Space: O(|s|), where |s| is the length of the string.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
