Given a string of words separated by spaces. The task is to find the first maximum length even word from the string. Eg: “You are given an array of n numbers” The answer would be “an” and not “of” because “an” comes before “of”.
Examples:
Input: "this is a test string"
Output: string
Even length words are this, is, test, string. Even
maximum length word is string.
Input: "geeksforgeeks is a platform for geeks"
Output: platform
Only even length word is platform.
Approach:
Approach to solve this problem is to split the string into words, and then iterate over each word to check if it has even length and is longer than the current maximum length even word found so far. If a suitable word is found, update the maximum length even word.
Here are the steps of the approach:
- Initialize a variable maxLenEvenWord to an empty string.
- Split the input string str into words using stringstream and getline.
- For each word w in the list of words, If the length of w is even and greater than the length of maxLenEvenWord, update maxLenEvenWord to w.
- Return maxLenEvenWord.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string findMaxLenEven(string str) {
string maxLenEvenWord = "" ;
stringstream ss(str);
string word;
while (getline(ss, word, ' ' )) {
if (word.length() % 2 == 0 && word.length() > maxLenEvenWord.length()) {
maxLenEvenWord = word;
}
}
return maxLenEvenWord;
}
int main() {
string str = "this is a test string" ;
cout << findMaxLenEven(str) << endl;
return 0;
}
|
Java
import java.util.StringTokenizer;
public class GFG {
public static String findMaxLenEven(String str) {
String maxLenEvenWord = "" ;
StringTokenizer st = new StringTokenizer(str);
while (st.hasMoreTokens()) {
String word = st.nextToken();
if (word.length() % 2 == 0 && word.length() > maxLenEvenWord.length()) {
maxLenEvenWord = word;
}
}
return maxLenEvenWord;
}
public static void main(String[] args) {
String str = "this is a test string" ;
System.out.println(findMaxLenEven(str));
}
}
|
Python3
def findMaxLenEven( str ):
maxLenEvenWord = ""
words = str .split()
for word in words:
if len (word) % 2 = = 0 and len (word) > len (maxLenEvenWord):
maxLenEvenWord = word
return maxLenEvenWord
str = "this is a test string"
print (findMaxLenEven( str ))
|
Javascript
function findMaxLenEven(str) {
let maxLenEvenWord = "" ;
let words = str.split( " " );
for (let i = 0; i < words.length; i++) {
let word = words[i];
if (word.length % 2 === 0 && word.length > maxLenEvenWord.length) {
maxLenEvenWord = word;
}
}
return maxLenEvenWord;
}
const str = "this is a test string" ;
console.log(findMaxLenEven(str));
|
Time Complexity: O(N+M) time, where N is the length of the input string. We iterate over each word once, and for each word, we perform a constant number of operations (length check and update), so the overall time complexity of the loop is O(M), where M is the total number of words in the input string. total time complexity of the algorithm is O(N+M).
Space Complexity: O(N), We need to store the input string and the maximum length even word, which takes O(N) space, where N is the length of the input string.
Approach: The idea is to traverse the input string and find length of each word. Check if the length of word is even or not. If even, then compare length with maximum length found so far. If length is strictly greater than maximum length then store current word as required string.
Below is the implementation of above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string findMaxLenEven(string str)
{
int n = str.length();
int i = 0;
int currlen = 0;
int maxlen = 0;
int st = -1;
while (i < n) {
if (str[i] == ' ' ) {
if (currlen % 2 == 0) {
if (maxlen < currlen) {
maxlen = currlen;
st = i - currlen;
}
}
currlen = 0;
}
else {
currlen++;
}
i++;
}
if (currlen % 2 == 0) {
if (maxlen < currlen) {
maxlen = currlen;
st = i - currlen;
}
}
if (st == -1)
return "-1" ;
return str.substr(st, maxlen);
}
int main()
{
string str = "this is a test string" ;
cout << findMaxLenEven(str);
return 0;
}
|
Java
class GFG
{
static String findMaxLenEven(String str)
{
int n = str.length();
int i = 0 ;
int currlen = 0 ;
int maxlen = 0 ;
int st = - 1 ;
while (i < n)
{
if (str.charAt(i) == ' ' )
{
if (currlen % 2 == 0 )
{
if (maxlen < currlen)
{
maxlen = currlen;
st = i - currlen;
}
}
currlen = 0 ;
}
else
{
currlen++;
}
i++;
}
if (currlen % 2 == 0 )
{
if (maxlen < currlen)
{
maxlen = currlen;
st = i - currlen;
}
}
if (st == - 1 )
return "-1" ;
return str.substring(st, st + maxlen);
}
public static void main(String args[])
{
String str = "this is a test string" ;
System.out.println( findMaxLenEven(str));
}
}
|
Python 3
def findMaxLenEven( str ):
n = len ( str )
i = 0
currlen = 0
maxlen = 0
st = - 1
while (i < n):
if ( str [i] = = ' ' ):
if (currlen % 2 = = 0 ):
if (maxlen < currlen):
maxlen = currlen
st = i - currlen
currlen = 0
else :
currlen + = 1
i + = 1
if (currlen % 2 = = 0 ):
if (maxlen < currlen):
maxlen = currlen
st = i - currlen
if (st = = - 1 ):
print ( "trie" )
return "-1"
return str [st: st + maxlen]
if __name__ = = "__main__" :
str = "this is a test string"
print (findMaxLenEven( str ))
|
C#
using System;
class GFG
{
static String findMaxLenEven( string str)
{
int n = str.Length;
int i = 0;
int currlen = 0;
int maxlen = 0;
int st = -1;
while (i < n)
{
if (str[i] == ' ' )
{
if (currlen % 2 == 0)
{
if (maxlen < currlen)
{
maxlen = currlen;
st = i - currlen;
}
}
currlen = 0;
}
else
{
currlen++;
}
i++;
}
if (currlen % 2 == 0)
{
if (maxlen < currlen)
{
maxlen = currlen;
st = i - currlen;
}
}
if (st == -1)
return "-1" ;
return str.Substring(st, maxlen);
}
public static void Main()
{
string str = "this is a test string" ;
Console.WriteLine(findMaxLenEven(str));
}
}
|
Javascript
<script>
function findMaxLenEven(str)
{
var n = str.length;
var i = 0;
var currlen = 0;
var maxlen = 0;
var st = -1;
while (i < n) {
if (str[i] == ' ' ) {
if (currlen % 2 == 0) {
if (maxlen < currlen) {
maxlen = currlen;
st = i - currlen;
}
}
currlen = 0;
}
else {
currlen++;
}
i++;
}
if (currlen % 2 == 0) {
if (maxlen < currlen) {
maxlen = currlen;
st = i - currlen;
}
}
if (st == -1)
return "-1" ;
return str.substr(st, maxlen);
}
var str = "this is a test string" ;
document.write( findMaxLenEven(str));
</script>
|
Time Complexity: O(N), where N is the length of the string.
Auxiliary Space: O(1)