我正在做PS,但无法得到我想要的问题答案。
问题:
给出字符串“my_string”和二维数组“queries”。查询有其元素 [s,e],这意味着将 my_string 的索引从 s 反转为 e。按照查询的顺序处理 my_string 并返回解决方案。
示例: my_string: "rermgorpsam" 查询:[[2, 3], [0, 7], [5, 9], [6, 10]] 结果:“程序员”
下面是我写的答案,没有任何错误,但不断得到“rermgorpsam”,而不是“程序员”。我认为 my_string 没有变化。
英语不是我的母语,所以我不确定我的解释是否正确,但如果您能让我知道问题出在哪里,我将不胜感激。
import java.util.*;
class Solution {
public String solution(String my_string, int[][] queries) {
char[] charArr = my_string.toCharArray();
for (int s = 0; s < queries.length; s++) {
for (int e = 0; e < queries[s].length; e++) {
reverse(charArr, queries[s][0], queries[s][1]);
}
}
String answer = String.valueOf(charArr);
return answer;
}
static void reverse(char[] arr, int s, int e) {
char[] copy = Arrays.copyOfRange(arr, s, e);
for (int i = 0; i < copy.length; i++) {
arr[s + i] = copy[copy.length - (i + 1)];
}
}
}
我认为问题出在 for 循环或方法中,但不知道为什么......
这里:
for (int s = 0; s < queries.length; s++) {
for (int e = 0; e < queries[s].length; e++) {
reverse(charArr, queries[s][0], queries[s][1]);
}
}
您知道
queries[s]
的长度为 2,但您要迭代它并每次调用 reverse
。这意味着您使用相同的参数调用 reverse
两次,大概会将字符反转回它们开始的顺序。
我建议你去掉内循环,留下这个:
for (int s = 0; s < queries.length; s++) {
reverse(charArr, queries[s][0], queries[s][1]);
}
或更简单地说:
for (int[] query : queries) {
reverse(charArr, query[0], query[1]);
}