我不知道为什么代码不能正常工作

问题描述 投票:0回答:1

我正在做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 循环或方法中,但不知道为什么......

java arrays methods postscript
1个回答
0
投票

这里:

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]);
}
© www.soinside.com 2019 - 2024. All rights reserved.