Table of Contents

## Problem Statement

In the “Count of Pairs at Same Distance as in English Alphabets” problem we have given a string “s”. Write a program that will print the number of pairs whose elements are at the same distance as in English alphabets.

## Input Format

The first line containing the given string “s”.

## Output Format

The first and only one line containing an integer value which denote the number of pairs whose elements are at the same distance as in English alphabets.

## Constraints

- 1<=|s|<=10^6
- s[i] must be a lower case latter english alphabet

## Example

agckj

3

Explanation: Here we can see the distance between the pairs (a,c), (g,j) and (j,k) are same distance as in English alphabets.

## Approach – Brute Force

### Algorithm

**1.** Set ans to zero.

**2.** Run first for loop from 0 to n-1.

**3.** Inside the first for loop run second for loop from i+1 to n-1.

**4.** Now, check the distance between indices of these pair is equal to the distance in English alphabets.

**5.** If in any pair characters are at the same distance, then increment the ans by one.

**6.** After traversing all the pair print value of ans.

### Implementation

#### C++ program to Count the Pairs at Same Distance as in English Alphabets

#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; int n=s.length(); int ans=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(abs(s[i]-s[j]) == abs(i-j)) { ans++; } } } cout<<ans<<endl; }

#### Java program to Count the Pairs at Same Distance as in English Alphabets

import static java.lang.Math.abs; import java.util.Scanner; class sum { public static void main(String[] args) { Scanner sr = new Scanner(System.in); String s = sr.next(); int n=s.length(); int ans=0; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(abs(s.charAt(i)-s.charAt(j)) == abs( i-j)) { ans++; } } } System.out.println(ans); } }

jqvdqwydvwaekufybwaekfyuawekf

13

### Complexity Analysis to Count of Pairs at Same Distance as in English Alphabets

#### Time Complexity

**O(n*n)** where **n** is the size of the string “s”. Here we check for every pair and check the condition if condition is true then increase our answer.

#### Space Complexity

**O(1)** because we don’t create any auxiliary space here.

## Approach – Optimal

### Algorithm

**1.** Set ans to zero.

**2.** Run first for loop from 0 to n-1.

**3.** Inside the first for loop run second for loop from 1 to (i+j) where j is less than or equal 26.

**4.** Now, check the distance between “i+j”th char ans “i”th char.

**5.** If the distance between them is “j” then increment the ans by one.

**6.** After completing both for loops, print value of ans.

### Implementation

#### C++ program to Count of Pairs at Same Distance as in English Alphabets

#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; int n=s.length(); int ans=0; for(int i=0;i<n;i++) { for(int j=1;i+j<n && j<=26;j++) { if(abs(s[i+j]-s[i]) == j) { ans++; } } } cout<<ans<<endl; }

#### Java program to Count of Pairs at Same Distance as in English Alphabets

import static java.lang.Math.abs; import java.util.Scanner; class sum { public static void main(String[] args) { Scanner sr = new Scanner(System.in); String s = sr.next(); int n=s.length(); int ans=0; for(int i=0;i<n;i++) { for(int j=1;i+j<n && j<=26;j++) { if(abs(s.charAt(i+j)-s.charAt(i)) == j) { ans++; } } } System.out.println(ans); } }

sdvwkudvwduv

5

### Complexity Analysis

**Time Complexity**

**O(n)** where **n** is the size of the string “s”. Here we run two for loop first loop run n times and second loop run at most 26 times.

#### Space Complexity

**O(1)** because we don’t create any auxiliary space here.