📌  相关文章
📜  用于检查一个字符串是否可以通过最多 X 次循环顺时针移位从另一个字符串形成的Java程序

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

用于检查一个字符串是否可以通过最多 X 次循环顺时针移位从另一个字符串形成的Java程序

给定一个整数X和两个字符串S1S2 ,任务是通过将字符顺时针循环移动最多 X 次来检查字符串S1是否可以转换为字符串S2

方法:想法是遍历字符串和对于每个索引,并找到两个字符串各自索引处字符的ASCII值之间的差异。如果差值小于 0,则对于循环移位,加 26 以获得实际差值。如果对于任何索引,差异超过X ,则S2不能从S1形成,否则可能。
下面是上述方法的实现:

Java
// Java implementation to check 
// that a given string can be 
// converted to another string 
// by circular clockwise shift 
// of each character by atmost 
// X times 
import java.io.*;
import java.util.*;
  
class GFG{
      
// Function to check that all 
// characters of s1 can be 
// converted to s2 by circular 
// clockwise shift atmost X times 
static void isConversionPossible(String s1, 
                                 String s2,
                                 int x) 
{ 
    int diff = 0, n; 
    n = s1.length(); 
      
    // Check for all characters of 
    // the strings whether the 
    // difference between their 
    // ascii values is less than 
    // X or not 
    for(int i = 0; i < n; i++) 
    {
          
       // If both the characters 
       // are same 
       if (s1.charAt(i) == s2.charAt(i))
           continue; 
         
       // Calculate the difference 
       // between the ASCII values 
       // of the characters 
       diff = ((int)(s2.charAt(i) - 
                     s1.charAt(i)) + 26) % 26; 
         
       // If difference exceeds X 
       if (diff > x)
       { 
           System.out.println("NO"); 
           return; 
       } 
    } 
    System.out.println("YES");
} 
      
// Driver Code
public static void main (String[] args)
{
    String s1 = "you"; 
    String s2 = "ara"; 
  
    int x = 6; 
  
    // Function call 
    isConversionPossible(s1, s2, x); 
}
}
  
// This code is contributed by Ganeshchowdharysadanala


输出:
YES

时间复杂度: O(N),N=Length(S1)

辅助空间: O(1)

有关更多详细信息,请参阅有关检查一个字符串是否可以通过最多 X 个圆形顺时针移位从另一个字符串形成的完整文章!