Free Preview - 5 String Problems

Check whether a String is Palindrome or not

def isPalindrome(s):
    return s == s[::-1]
 
s = "malayalam"
ans = isPalindrome(s)
 
if ans:
    print("Yes")
else:
    print("No")

Find Duplicate characters in a string

def printDups(Str):
 
    count = {}
    for i in range(len(Str)):
        if(Str[i] in count):
            count[Str[i]] += 1
        else:
            count[Str[i]] = 1
        #increase the count of characters by 1
  
    for it,it2 in count.items():  #iterating through the unordered map
        if (it2 > 1):   #if the count of characters is greater then 1 then duplicate found
            print(str(it) + ", count = "+str(it2))

Str = "test string"
printDups(Str)

Write a Code to check whether one string is a rotation of another

def check_rotation(s, goal):

	if (len(s) != len(goal)):
		skip

	q1 = []
	for i in range(len(s)):
		q1.insert(0, s[i])

	q2 = []
	for i in range(len(goal)):
		q2.insert(0, goal[i])

	k = len(goal)
	while (k > 0):
		ch = q2[0]
		q2.pop(0)
		q2.append(ch)
		if (q2 == q1):
			return True
		k -= 1
	return False


s1 = "ABCD"
s2 = "CDAB"
if (check_rotation(s1, s2)):
	print(s2, " is a rotated form of ", s1)
else:
	print(s2, " is not a rotated form of ", s1)
s3 = "ACBD"
if (check_rotation(s1, s3)):
	print(s3, " is a rotated form of ", s1)
else:
	print(s3, " is not a rotated form of ", s1)

Write a Program to check whether a string is a valid shuffle of two strings or not

MAX = 256

# This function returns true if contents of arr1[] and arr2[] are same otherwise false.
def compare(arr1, arr2):
	
	global MAX

	for i in range(MAX):
		if (arr1[i] != arr2[i]):
			return False
			
	return True

# This function search for all permutations of pat[] in txt[]
def search(pat, txt):
	
	M = len(pat)
	N = len(txt)

	# countP[]: Store count of all characters of pattern
	# countTW[]: Store count of current window of text
	countP = [0 for _ in range(MAX)]
	countTW = [0 for _ in range(MAX)]

	for i in range(M):
		countP[ord(pat[i])] += 1
		countTW[ord(txt[i])] += 1

	# Traverse through remaining characters of pattern
	for i in range(M, N):

		# Compare counts of current window
		# of text with counts of pattern[]
		if (compare(countP, countTW)):
			return True

		# Add current character to current window
		countTW[ord(txt[i])] += 1

		# Remove the first character of previous window
		countTW[ord(txt[i - M])] -= 1

	# Check for the last window in text
	if(compare(countP, countTW)):
		return True
	return False


txt = "BACDGABCDA"
pat = "ABCD"

if (search(pat, txt)):
	print("Yes")
else:
	print("No")

Count and Say problem

def countnndSay(n):
	if (n == 1):
		return "1"
	if (n == 2):
		return "11"

	# Find n'th term by generating all terms from 3 to n-1. Every term is generated using previous term 
	s = "11"
	for _ in range(3, n + 1):
		# In below for loop, previous character is processed in current iteration. That is why a dummy character is added to make sure that loop runs one extra iteration.
		s += '$'
		l = len(s)

		cnt = 1 # Initialize count
		tmp = "" # Initialize i'th
		# Process previous term to find the next term
		for j in range(1 , l):

			# If current character doesn't match
			if (s[j] != s[j - 1]):

				# Append count of str[j-1] to temp
				tmp += str(cnt + 0)

				# Append str[j-1]
				tmp += s[j - 1]

				# Reset count
				cnt = 1

			# If matches, then increment count of matching characters
			else:
				cnt += 1

		# Update str
		s = tmp
	return s;

N = 3
print(countnndSay(N))

Write a program to find the longest Palindrome in a string.[ Longest palindromic Substring]

def expand(s, low, high):
    length = len(s)
 
    # expand in both directions
    while low >= 0 and high < length and s[low] == s[high]:
        low = low - 1
        high = high + 1
 
    # return palindromic substring
    return s[low + 1:high]
 

def findLongestPalindromicSubstring(s):
    if not s or not len(s):
        return ''
 
    # `max_str` stores the maximum length palindromic substring found so far
    max_str = ''
 
    # `max_length` stores the maximum length of palindromic substring found so far
    max_length = 0
 
    # consider every character of the given string as a midpoint and expand in both directions to find maximum length palindrome
 
    for i in range(len(s)):
 
        # find the longest odd length palindrome with `s[i]` as a midpoint
        curr_str = expand(s, i, i)
        curr_length = len(curr_str)
 
        # update maximum length palindromic substring if the odd length palindrome has a greater length
 
        if curr_length > max_length:
            max_length = curr_length
            max_str = curr_str
 
        # Find the longest even length palindrome with `s[i]` and `s[i+1]` as midpoints. Note that an even length palindrome has two midpoints.
 
        curr_str = expand(s, i, i + 1)
        curr_length = len(curr_str)
 
        # update maximum length palindromic substring if even length palindrome has a greater length
 
        if curr_length > max_length:
            max_length = curr_length
            max_str = curr_str
 
    return max_str
 

s = 'ABDCBCDBDCBBC'
print(f'The longest palindromic substring of {s} is', findLongestPalindromicSubstring(s))

Buy the Interview Guide

Buy on gumroad

This blog post only covers the preview of the product. Get the product from Gumroad to unlock all questions. The E-book includes in-depth explanation for each solution.

🎯 Expert Curated List of Questions.

💼 Guaranteed Interview Clearance.

✅ Master FAANG Interviews.

💸 Boost Skills, Get Paid.

Get interview Ready.