Count Prefix and Suffix Pairs I
EasyUpdated: Sep 2, 2025
Practice on:
Problem
You are given a 0-indexed string array words.
Let's define a boolean function isPrefixAndSuffix that takes two strings, str1 and str2:
isPrefixAndSuffix(str1, str2)returnstrueifstr1is both a prefix and a suffix ofstr2, andfalseotherwise.
For example, isPrefixAndSuffix("aba", "ababa") is true because "aba" is a prefix of "ababa" and also a suffix, but isPrefixAndSuffix("abc", "abcd") is false.
Return an integer denoting the number of index pairs (i, j) such that i < j, and isPrefixAndSuffix(words[i], words[j]) is true.
Examples
Example 1:
Input: words = ["a","aba","ababa","aa"]
Output: 4
Explanation: In this example, the counted index pairs are:
i = 0 and j = 1 because isPrefixAndSuffix("a", "aba") is true.
i = 0 and j = 2 because isPrefixAndSuffix("a", "ababa") is true.
i = 0 and j = 3 because isPrefixAndSuffix("a", "aa") is true.
i = 1 and j = 2 because isPrefixAndSuffix("aba", "ababa") is true.
Therefore, the answer is 4.
Example 2:
Input: words = ["pa","papa","ma","mama"]
Output: 2
Explanation: In this example, the counted index pairs are:
i = 0 and j = 1 because isPrefixAndSuffix("pa", "papa") is true.
i = 2 and j = 3 because isPrefixAndSuffix("ma", "mama") is true.
Therefore, the answer is 2.
Example 3:
Input: words = ["abab","ab"]
Output: 0
Explanation: In this example, the only valid index pair is i = 0 and j = 1, and isPrefixAndSuffix("abab", "ab") is false.
Therefore, the answer is 0.
Constraints
1 <= words.length <= 501 <= words[i].length <= 10words[i]consists only of lowercase English letters.
Solution
Method 1 - Naive
- The problem requires checking if a word
words[i]is both a prefix and suffix of another wordwords[j]wherei < j. - A simple way to check this is to use string methods
startsWithandendsWith(in Java) or the equivalent operations in Python. - We iterate over all possible pairs
(i, j)and count the valid pairs.
Video explanation
Here is the video explaining this method in detail. Please check it out:
<div class="youtube-embed"><iframe src="https://www.youtube.com/embed/YX6uL3d-rMs" frameborder="0" allowfullscreen></iframe></div>
Code
Java
class Solution {
public int countPrefixSuffixPairs(String[] words) {
int ans = 0;
for (int i = 0; i < words.length; i++) {
for (int j = i + 1; j < words.length; j++) {
if (isPrefixAndSuffix(words[i], words[j])) {
ans++;
}
}
}
return ans;
}
private boolean isPrefixAndSuffix(String str1, String str2) {
return str2.startsWith(str1) && str2.endsWith(str1);
}
}
Python
class Solution:
def countPrefixSuffixPairs(self, words: List[str]) -> int:
ans: int = 0
for i in range(len(words)):
for j in range(i + 1, len(words)):
if self.isPrefixAndSuffix(words[i], words[j]):
ans += 1
return ans
def isPrefixAndSuffix(self, str1: str, str2: str) -> bool:
return str2.startswith(str1) and str2.endswith(str1)
Complexity
- ⏰ Time complexity:
O(n^2 * l), wherenis the length of thewordsarray andlis average length of words, because of the nested loop and starts with and ends with takeO(l)time wherelis length of prefix and suffix, and is proportional to average length of word.. - 🧺 Space complexity:
O(1)