# HackerRank in a String!

### Problem Statement :

```We say that a string contains the word hackerrank if a subsequence of its characters spell the word hackerrank. Remeber that a subsequence maintains the order of characters selected from a sequence.

More formally, let  p , p, . . . , p  be the respective indices of h, a, c, k, e, r, r, a, n, k in string s. If p < p < p , . . . , < p  is true, then s contains hackerrank.

For each query, print YES on a new line if the string contains hackerrank, otherwise, print NO.

Function Description

Complete the hackerrankInString function in the editor below.

hackerrankInString has the following parameter(s):

string s: a string

Returns

string: YES or NO

Input Format

The first line contains an integer q, the number of queries.
Each of the next q lines contains a single query string s.

Constraints

2  <=   q   <=  10^2
10  <=  length of s  <=  10^4```

### Solution :

```                            ```Solution in C :

In   C++  :

#include <bits/stdc++.h>

using namespace std;

int main(){
int q;
cin >> q;
for(int a0 = 0; a0 < q; a0++){
string s;
cin >> s;
string cur = "hackerrank";
int st = 0;
for (int i= 0; i < s.size() && st < cur.size(); i++) {
if (s[i] == cur[st]) {
st++;
}
}
if (st == cur.size()) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}

In   Java  :

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int q = in.nextInt();
for(int a0 = 0; a0 < q; a0++){
String s = in.next();
System.out.println(hasSubseq(s,"hackerrank") ? "YES" : "NO");
}
}

private static boolean hasSubseq(String source, String target) {
if (target.length() == 0) return true;
if (source.length() == 0) return false;

int x = 0;
for (char c : source.toCharArray()) {
if (c == target.charAt(x))
x++;
if (x == target.length())
return true;
}
return false;
}
}

In  C :

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

char *hackerrank(char *string)
{
int total;
int i;
int j;
char *comp = "hackerrank\0";

i = 0;
j = 0;
while (string[i] != '\0')
{
if (string[i] == comp[j])
j += 1;
i += 1;
}
if (strlen(comp) == j)
return ("YES");
else
return ("NO");
}

int main(){
int q;
scanf("%d",&q);
for(int a0 = 0; a0 < q; a0++){
char* s = (char *)malloc(512000 * sizeof(char));
scanf("%s",s);
printf("%s\n", hackerrank(s));
}
return 0;
}

In   Python3  :

#!/bin/python3

import sys
import re

q = int(input().strip())
for a0 in range(q):
s = input().strip()

pattern = ".*h.*a.*c.*k.*e.*r.*r.*a.*n.*k.*"
m = re.search(pattern, s)
if m is not None:
print("YES")
else:
print("NO")```
```

## Insert a node at a specific position in a linked list

Given the pointer to the head node of a linked list and an integer to insert at a certain position, create a new node with the given integer as its data attribute, insert this node at the desired position and return the head node. A position of 0 indicates head, a position of 1 indicates one node away from the head and so on. The head pointer given may be null meaning that the initial list is e

## Delete a Node

Delete the node at a given position in a linked list and return a reference to the head node. The head is at position 0. The list may be empty after you delete the node. In that case, return a null value. Example: list=0->1->2->3 position=2 After removing the node at position 2, list'= 0->1->-3. Function Description: Complete the deleteNode function in the editor below. deleteNo

## Print in Reverse

Given a pointer to the head of a singly-linked list, print each data value from the reversed list. If the given list is empty, do not print anything. Example head* refers to the linked list with data values 1->2->3->Null Print the following: 3 2 1 Function Description: Complete the reversePrint function in the editor below. reversePrint has the following parameters: Sing