📌  相关文章
📜  Java程序通过执行给定的移位操作来修改字符串

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

Java程序通过执行给定的移位操作来修改字符串

给定一个包含小写英文字母的字符串S和一个由{direction, amount}形式的对组成的矩阵shift[][] ,其中方向可以是0(左移)1(右移)数量是字符串S需要移动的索引数。任务是返回执行给定操作后可以获得的修改后的字符串。
注意:左移 1 是指删除S的第一个字符并将其附加到末尾。类似地,右移 1 是指删除S的最后一个字符并在开头插入。

例子

朴素方法:解决问题的最简单方法是遍历矩阵shift[][]并在指定方向上将 S[0] 移动索引数量。完成所有移位操作后,打印得到的最终字符串。
时间复杂度: O(N 2 )
辅助空间: O(N)

高效方法:要优化上述方法,请按照以下步骤操作:

  • 初始化一个变量,比如val,以存储有效班次。
  • 遍历矩阵shift[][]并在每i行执行以下操作:
  • 如果shift[i][0] = 0 ( left shift ) 则将val 减小 -shift[i][1]。
  • 除此以外 左移),通过shift[i][1]增加val
  • 更新val = val % len (用于进一步优化有效班次)。
  • 初始化一个字符串, result =“” ,以存储修改后的字符串。
  • 现在,检查是否 val > 0 。如果发现为真,则通过val对字符串执行正确的旋转。
  • 否则,将字符串向左旋转|val|数量。
  • 打印结果。

下面是上述方法的实现:

Java
// Java implementataion
// of above approach
import java.io.*;
class GFG 
{
  
  // Function to find the string obtained
  // after performing given shift operations
  static void stringShift(String s, int[][] shift)
  {
    int val = 0;
    for (int i = 0; i < shift.length; ++i)
  
      // If shift[i][0] = 0, then left shift
      // Otherwise, right shift
      if (shift[i][0] == 0)
        val -= shift[i][1];
    else
      val += shift[i][1];
  
    // Stores length of the string
    int len = s.length();
  
    // Effective shift calculation
    val = val % len;
  
    // Stores modified string
    String result = "";
  
    // Right rotation
    if (val > 0)
      result = s.substring(len - val, (len - val) + val)
      + s.substring(0, len - val);
  
    // Left rotation
    else
      result = s.substring(-val, len + val)
      + s.substring(0, -val);
  
    System.out.println(result);
  }
  
  // Driver Code
  public static void main(String[] args)
  {
    String s = "abc";
    int[][] shift
      = new int[][] {{ 0, 1 }, { 1, 2 }};
  
    stringShift(s, shift);
  }
}
  
// This code is contributed by Dharanendra L V


输出:
cab

时间复杂度: O(N)
辅助空间: O(N)

有关详细信息,请参阅有关通过执行给定的移位操作修改字符串的完整文章!