Experiment - 4
Student Name: Tekrat Prajapati UID: 22BCS13545
Branch: BE - CSE Section/Group: IOT_635- A
Semester: 6 Sub Code: 22CSP-351
Subject Name: Advanced Programming Lab - 2 Date: 16/01/2025
Problem - 1
Aim - To determine whether a given string s can be transformed into another string goal by
performing a series of cyclic left shifts, where each shift moves the leftmost character of s to
the rightmost position.
Objective - To determine whether a given string s can be transformed into another string goal by
performing a series of cyclic left shifts.
Implementation/Code -
class Solution {
public:
bool rotateString(string s, string goal) {
if (s.size() != goal.size())
return false;
if ((s + s).find(goal) != string::npos)
return true;
else
return false;
}
};
Output -
Time Complexity - O(n) Space Complexity - O(n )
PROBLEM – 2
Aim - To find the index of the first occurrence of a substring (needle) within a given string
(haystack) or return -1 if the substring is not present.
Objective - To implement an efficient algorithm that searches for needle in haystack using built-in
functions or string-matching algorithms like Brute Force, Knuth-Morris-Pratt (KMP), or Boyer-
Moore to achieve optimal performance.
Implementation/Code -
class Solution {
public:
int strStr(string haystack, string
needle) {
size_t pos = haystack.find(needle);
return (pos != string::npos) ? pos : 1;
}
};
Output -
Time Complexity - O(n*m) Space Complexity - O(1)
PROBLEM – 3
Aim - To determine the minimum number of times a string a must be repeated such that
another string b becomes a substring of the repeated string
Objective - To implement an efficient algorithm that finds the minimal repetitions
of a required to contain b as a substring, using string operations optimally.
Implementation/Code -
class Solution {
public:
int repeatedStringMatch(string a, string b) {
string repeated = a;
int count = 1;
// Repeat `a` until its length is at least the length of `b`
while (repeated.length() < b.length()) {
repeated += a;
count++;
}
if (repeated.find(b) != string::npos)
return count;
/ / One more repetition might be needed
repeated += a;
count++;
if (repeated.find(b) != string::npos)
return count;
return -1;
}
};
Output -
Time Complexity - O(n*m) Space Complexity - O(n*m)
Learning Outcomes -
1️. String Manipulation: Learned how to efficiently rotate, concatenate, and search
substrings in a given string.
2️. Pattern Matching Algorithms: Explored KMP Algorithm to optimize substring search,
reducing time complexity from O(NM) to O(N + M).
3️. Optimized Searching Techniques: Used find(), brute force, and KMP to detect substring
occurrences efficiently.
4️. Understanding LPS (Longest Prefix Suffix) Array: Implemented LPS to avoid
redundant comparisons in KMP pattern matching.
5️. Algorithm Efficiency & Complexity Analysis: Compared brute-force, built-in functions,
and KMP for optimal string processing.