给你一个字符串S,由N个小拉丁字母'a'和'b'组成。您还可以处理M个查询。查询如下:
这里的一切都是1索引。
import java.util.*;
public class MyCode {
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) {
int N=sc.nextInt();
//sc.nextLine();
String s = sc.next();
s = s.substring(0, N);
System.out.println(s);
// char[] st=s.toCharArray();
int M=sc.nextInt();
for(int i=0;i<M;i++){
String q=sc.next();
if(q=="W"){
System.out.println(queryW(s));
}else if(q=="R"){
queryR(s);
}else if(q=="C"){
queryC(s);
}else if(q=="H"){
System.out.println(queryH(s));
}else if(q=="S"){
System.out.println(queryS(s));
}
}
}
public static String queryW(String s){
int l=sc.nextInt();
int r=sc.nextInt();
return s.substring(l,r);
}
public static void queryR(String s){
int l=sc.nextInt();
int r=sc.nextInt();
s.substring(l,r);
char[] st=s.toCharArray();
for (int i=s.length()-1;i>=0;i--) //REVERSE THE SUBSTRING
System.out.print(st[i]);
}
public static void queryC(String s){
int l=sc.nextInt();
int r=sc.nextInt();
char ch=sc.next().charAt(0);
String st=s.substring(l,r);
char[] n =st.toCharArray();
for(int i=0;i<n.length;i++){
n[i]=ch;
System.out.println(n[i]);
}
}
public static int queryH(String s){
int l1=sc.nextInt();
int l2=sc.nextInt();
int len=sc.nextInt();
String st1=s.substring(l1,len);
String st2=s.substring(l2,len);
char[] s1 = st1.toCharArray();
char[] s2 = st2.toCharArray();
int shorter = Math.min(s1.length, s2.length);
int longest = Math.max(s1.length, s2.length);
int result = 0;
for (int i=0; i<shorter; i++) {
if (s1[i] != s2[i])
result++;
}
result += longest - shorter;
return result;
}
public static String queryS(String s){
int l1=sc.nextInt();
int r1=sc.nextInt();
int l2=sc.nextInt();
int r2=sc.nextInt();
String st1=s.substring(l1,r1);
String st2=s.substring(l2,r2);
String temp="";
while(st1!=st2){
temp=st1;
st1=st2;
st2=temp;
}
return st1.concat(st2);
}
}
这是我的代码。我想把输入作为:
10
aabbbabbab
10
R 1 5
W 3 8
C 4 4 a
H 2 1 9
S 5 9 10 10
H 1 2 9
C 3 3 b
H 7 8 2
C 2 9 a
S 7 9 10 10
但for循环不能按预期工作。它只接受前10个值作为输入,而我希望读取整个值。我在某个地方犯了一个错误,所以需要帮助。