描述
游游拿到了一個長度為n的字符串,她每次操作會選擇一個區間[l,r],將第l個字母到第r個字母各重復一次,插入到該字母的后面。
例如,對于字符串"abcd",若選擇區間[2,3]進行操作,字符串將變成"abbccd"
游游將進行q次操作。她想知道,q次操作結束后,最終的字符串是什么樣子?
輸入描述:
第一行輸入兩個正整數n和q,分別代表字符串長度和操作次數。
第二行輸入一個僅由小寫英文字母組成的字符串,代表初始的字符串。
接下來的q行,每行輸入兩個正整數l,r,代表操作的區間。
1≤n≤1000
1≤q≤10
1≤l≤r≤10^6
保證每次操作時,r不大于當前的字符串長度。輸出描述:
一個字符串,代表所有操作結束后形成的字符串。
示例1
輸入:
6 2 abcdef 2 4 3 6輸出:
abbbccccdddef說明:
第一次操作后,字符串變成abbccddef
第二次操作后,字符串變成abbbccccdddef
一、問題分析
首先讀題,仔細看描述中的內容,發現需求是
1.給定一個字符串,將指定區間的字母翻倍
2.翻倍的方法是,在在每個字母后面插入一個相同的字母
二、解題思路
1.首先定義長度n,操作次數q,讀取數據
2.然后定義兩個整數l和r用于讀取區間
3.定義一個字符串answer,為其分配足夠的內存空間
4.空間是原字符串長度+(r? -? l + 1)
三、具體步驟
使用的語言是C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {int n, q;while (scanf("%d %d", &n, &q) != EOF) {char *str = (char*)malloc(sizeof(char) * (n + 1));if(str == NULL) {printf("內存分配失敗");return 0;}scanf("%s",str);str[n] = '\0';int l, r;for(int i = 0; i < q; i++) {scanf("%d %d", &l, &r);int len = strlen(str);char* tmp = (char*)malloc(sizeof(char) * (len + r - l + 1));for(int j = 0; j < l - 1; j++) {tmp[j] = str[j];}int index = l - 1;for(int j = l - 1; j < r; j++) {tmp[index] = str[j];index++;tmp[index] = str[j];index++;}for(int j = r; j < len; j++) {tmp[index] = str[j];index++;}tmp[index] = '\0';str = tmp;}printf("%s\n",str);}return 0;
}