T1. 数组后一个数与前一个数差值的绝对值小于1则为稳定序列,求一个数组的最长稳定子序列长度。
测试用例:
input:
5
2 4 2 3 2
output:
3
import java.util.Scanner;
public class acmtest1 {
public static void main(String[] args) {
// 携程 1
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] res = new int[n];
for (int i = 0;i < n; i++){
res[i] = sc.nextInt();
}
int ans = 0;
int left = 0;
for (int rignt = 1; rignt < n; rignt++){
if (Math.abs(res[rignt] - res[rignt - 1]) == 1){
ans = Math.max(ans, rignt - left + 1);
}else{
left = rignt;
}
}
System.out.println(ans);
}
}
T2: 对字符串的指定区间内的字母进行重写2次的的操作。
测试用例:
input:
6 2
abcdef
2 4
3 6
output:
abbbccccdddef
(变换过程:abcdef --> abbccddef --> abbbccccdddef)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class acmtest2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().trim().split(" ");
int n = Integer.parseInt(str[0]);
int time = Integer.parseInt(str[1]);
String res = br.readLine();
int[][] nums = new int[time][2];
for (int i = 0; i < time;i++ ){
str = br.readLine().trim().split(" ");
for (int j = 0; j < time; j++){
nums[i][j] = Integer.parseInt(str[j]);
}
}
StringBuilder ans = new StringBuilder();
int begin = 0;
boolean index = true;
while (begin < time){
char[] chars = res.toCharArray();
for (int i = 0; i < res.length(); i++){
char c = chars[i];
ans.append(c);
if (i >= nums[begin][0] - 1 && i <= nums[begin][1] - 1){
ans.append(c);
}
}
res = ans.toString();
if (index){
ans.delete(0, ans.length());
index = false;
}
begin++;
}
System.out.println(ans);
}
}