1611. Реверс подстроки

 

Дана строка s, в которой выделили подстроку, состоящую из символов с i-го по j-ый включительно (символы строки s нумеруются с единицы) и поменяли местами i-ый символ с j-ым, (i + 1)-ый с (j – 1)-ым и так далее (конвертировали подстроку). Выведите строку s после внесенных изменений.

 

Вход. В первой строке содержится строка s длиной не более 1000 символов, во второй – два числа i и j (ij).

 

Выход. Выведите строку s после внесенных изменений.

 

Пример входа

Пример выхода

gaqipkajibk

5 6

gaqikpajibk

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

В задаче следует обернуть подстроку s[i..j].

 

Реализация алгоритма

Объявим символьный массив, в котором храним входную строку.

 

#define MAX 1010

char s[MAX];

 

Входную строку читаем в массив начиная с s[1] (а не с s[0]), так как индексация по условию начинается с единицы.

 

gets(s+1);

scanf("%d %d",&i,&j);

 

Обращаем подстроку s[i..j].

 

while(i < j)

{

  ch = s[i]; s[i] = s[j]; s[j] = ch;

  i++; j--;

}

 

Выводим ответ.

 

puts(s+1);

 

Реализация алгоритмас использованием swap

 

Объявим символьный массив, в котором храним входную строку.

 

#define MAX 1010

char s[MAX];

 

Функция swap меняет местами символы a и b.

 

void swap(char &a, char &b)

{

  char temp = a; a = b; b = temp;

}

 

Входную строку читаем в массив начиная с s[1] (а не с s[0]), так как индексация по условию начинается с единицы.

 

gets(s+1);

scanf("%d %d",&i,&j);

 

Обращаем подстроку s[i..j].

 

while(i < j)

{

  swap(s[i],s[j]);

  i++; j--;

}

 

Выводим ответ.

 

puts(s+1);

 

Реализация алгоритма STL reverse

 

#include <cstdio>

#include <algorithm>

#define MAX 1010

using namespace std;

 

char s[MAX];

int i, j;

 

int main(void)

{

  gets(s+1);

  scanf("%d %d",&i,&j);

 

  reverse(s+i,s+j+1);

 

  puts(s+1);

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    char[] s = con.nextLine().toCharArray();

    int i = con.nextInt() - 1;

    int j = con.nextInt() - 1;

    while(i < j)

    {

      char temp = s[i]; s[i] = s[j]; s[j] = temp;

      i++; j--;

    }

    String res =  String.valueOf(s);

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

 

s = input()

i, j = map(int,input().split())

 

sub = s[i-1:j]

res = s[:i-1] + sub[::-1] + s[j:]

print(res)