📌  相关文章
📜  与英文字母相同距离的字符对数

📅  最后修改于: 2022-05-13 01:57:06.430000             🧑  作者: Mango

与英文字母相同距离的字符对数

给定一个字符串,任务是计算元素与英文字母距离相同的对数。
注意:考虑字符之间的绝对距离。
例子 :

Input:  str = "geeksforgeeks"
Output:  4
Explanation: In this (g, s), (e, g), (e, k), (e, g) 
are the pairs that are at same distances as
in English alphabets.

Input:  str = "observation"
Output:  4
Explanation: (b, i), (s, v), (o, n), (v, t) are 
at same distances as in English alphabets.

一个简单的解决方案是考虑生成所有对并将对字符与它们之间的距离进行比较。如果一对的距离相同,则增加结果。

C++
// A Simple C++ program to find pairs with distance
// equal to English alphabet distance
#include 
using namespace std;
 
// Function to count pairs
int countPairs(string str)
{
    int result = 0;
    int n = str.length();
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
 
            // Increment count if characters are at
            // same distance
            if (abs(str[i] - str[j]) == abs(i - j))
                result++;
 
    return result;
}
 
// Driver code
int main()
{
    string str = "geeksforgeeks";
    cout << countPairs(str);
    return 0;
}


Java
// A Simple Java program to find pairs with distance
// equal to English alphabet distance
class Test {
     
    // Method to count pairs
    static int countPairs(String str)
    {
        int result = 0;
        int n = str.length();
        for (int i = 0; i < n; i++)
          for (int j = i + 1; j < n; j++)
             
            // Increment count if characters
            // are at same distance
            if (Math.abs(str.charAt(i) - str.charAt(j)) ==
                                          Math.abs(i - j))
                result++;
 
        return result;
    }
 
    // Driver method
    public static void main(String args[])
    {
        String str = "geeksforgeeks";
        System.out.println(countPairs(str));
    }
}


Python 3
# Simple Python3 program to find pairs with
# distance equal to English alphabet distance
 
# Function to count pairs
def countPairs(str1):
    result = 0;
    n = len(str1)
    for i in range(0, n):
        for j in range(i + 1, n):
 
            # Increment count if characters
            # are at same distance
            if (abs(ord(str1[i]) -
                    ord(str1[j])) == abs(i - j)):
                result += 1;
 
    return result;
 
# Driver code
if __name__ == "__main__":
    str1 = "geeksforgeeks";
    print(countPairs(str1));
 
# This code is contributed
# by Sairahul099


C#
// A Simple C# program to find pairs with distance
// equal to English alphabet distance
using System;
 
class Test {
     
    // Method to count pairs
    static int countPairs(string str)
    {
        int result = 0;
        int n = str.Length;
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
             
            // Increment count if characters
            // are at same distance
            if (Math.Abs(str[i] - str[j]) == Math.Abs(i - j))
                result++;
 
        return result;
    }
 
    // Driver method
    public static void Main()
    {
        string str = "geeksforgeeks";
        Console.WriteLine(countPairs(str));
    }
}
 
// This Code is contributed by vt_m.


PHP


Javascript


C++
// An optimized C++ program to find pairs with distance
// equal to English alphabet distance
#include 
using namespace std;
const int MAX_CHAR = 26;
 
// Function to count pairs with distance
// equal to English alphabet distance
int countPairs(string str)
{
    int result = 0;
    int n = str.length();
 
    for (int i = 0; i < n; i++)
 
        // This loop runs at most 26 times
        for (int j = 1; (i + j) < n && j <= MAX_CHAR; j++)
            if ((abs(str[i + j] - str[i]) == j))
                result++;
 
    return result;
}
 
// Driver code
int main()
{
    string str = "geeksforgeeks";
    cout << countPairs(str);
    return 0;
}


Java
// An optimized Java program to find pairs with distance
// equal to English alphabet distance
 
class Test {
    static final int MAX_CHAR = 26;
 
    // Method to count pairs with distance
    // equal to English alphabet distance
    static int countPairs(String str)
    {
        int result = 0;
        int n = str.length();
 
        for (int i = 0; i < n; i++)
 
            // This loop runs at most 26 times
            for (int j = 1; (i + j) < n && j <= MAX_CHAR; j++)
                if ((Math.abs(str.charAt(i + j) - str.charAt(i)) == j))
                    result++;
 
        return result;
    }
 
    // Driver method
    public static void main(String args[])
    {
        String str = "geeksforgeeks";
        System.out.println(countPairs(str));
    }
}


Python 3
# An optimized C++ program to find pairs with
# distance equal to English alphabet distance
 
MAX_CHAR = 26
 
# Function to count pairs with distance
# equal to English alphabet distance
def countPairs(str1):
    result = 0;
    n = len(str1)
 
    for i in range(0, n):
 
        # This loop runs at most 26 times
        for j in range(1, MAX_CHAR + 1):
            if((i + j) < n):
                if ((abs(ord(str1[i + j]) -
                         ord(str1[i])) == j)):
                    result += 1;
 
    return result
 
# Driver code
if __name__ == "__main__":
    str1 = "geeksforgeeks";
    print(countPairs(str1))
 
# This code is contributed
# by Sairahul099


C#
// An optimized C# program to find pairs with distance
// equal to English alphabet distance
using System;
 
class Test {
     
    static int MAX_CHAR = 26;
 
    // Method to count pairs with distance
    // equal to English alphabet distance
    static int countPairs(string str)
    {
        int result = 0;
        int n = str.Length;
 
        for (int i = 0; i < n; i++)
 
            // This loop runs at most 26 times
            for (int j = 1; (i + j) < n && j <= MAX_CHAR; j++)
                if ((Math.Abs(str[i + j] - str[i]) == j))
                    result++;
 
        return result;
    }
 
    // Driver method
    public static void Main()
    {
        string str = "geeksforgeeks";
        Console.WriteLine(countPairs(str));
    }
}
 
// This Code is contributed by vt_m.


PHP


Javascript


输出:

4

上述方法的时间复杂度为O(n 2 ) 。可以通过使用只能有 26 个字母的事实来优化上述方法,即,不是检查一个元素到字符串的长度,而是只检查从当前索引到第 26 个索引。

C++

// An optimized C++ program to find pairs with distance
// equal to English alphabet distance
#include 
using namespace std;
const int MAX_CHAR = 26;
 
// Function to count pairs with distance
// equal to English alphabet distance
int countPairs(string str)
{
    int result = 0;
    int n = str.length();
 
    for (int i = 0; i < n; i++)
 
        // This loop runs at most 26 times
        for (int j = 1; (i + j) < n && j <= MAX_CHAR; j++)
            if ((abs(str[i + j] - str[i]) == j))
                result++;
 
    return result;
}
 
// Driver code
int main()
{
    string str = "geeksforgeeks";
    cout << countPairs(str);
    return 0;
}

Java

// An optimized Java program to find pairs with distance
// equal to English alphabet distance
 
class Test {
    static final int MAX_CHAR = 26;
 
    // Method to count pairs with distance
    // equal to English alphabet distance
    static int countPairs(String str)
    {
        int result = 0;
        int n = str.length();
 
        for (int i = 0; i < n; i++)
 
            // This loop runs at most 26 times
            for (int j = 1; (i + j) < n && j <= MAX_CHAR; j++)
                if ((Math.abs(str.charAt(i + j) - str.charAt(i)) == j))
                    result++;
 
        return result;
    }
 
    // Driver method
    public static void main(String args[])
    {
        String str = "geeksforgeeks";
        System.out.println(countPairs(str));
    }
}

Python3

# An optimized C++ program to find pairs with
# distance equal to English alphabet distance
 
MAX_CHAR = 26
 
# Function to count pairs with distance
# equal to English alphabet distance
def countPairs(str1):
    result = 0;
    n = len(str1)
 
    for i in range(0, n):
 
        # This loop runs at most 26 times
        for j in range(1, MAX_CHAR + 1):
            if((i + j) < n):
                if ((abs(ord(str1[i + j]) -
                         ord(str1[i])) == j)):
                    result += 1;
 
    return result
 
# Driver code
if __name__ == "__main__":
    str1 = "geeksforgeeks";
    print(countPairs(str1))
 
# This code is contributed
# by Sairahul099

C#

// An optimized C# program to find pairs with distance
// equal to English alphabet distance
using System;
 
class Test {
     
    static int MAX_CHAR = 26;
 
    // Method to count pairs with distance
    // equal to English alphabet distance
    static int countPairs(string str)
    {
        int result = 0;
        int n = str.Length;
 
        for (int i = 0; i < n; i++)
 
            // This loop runs at most 26 times
            for (int j = 1; (i + j) < n && j <= MAX_CHAR; j++)
                if ((Math.Abs(str[i + j] - str[i]) == j))
                    result++;
 
        return result;
    }
 
    // Driver method
    public static void Main()
    {
        string str = "geeksforgeeks";
        Console.WriteLine(countPairs(str));
    }
}
 
// This Code is contributed by vt_m.

PHP


Javascript


输出:

4