有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Leetcode 833:字符串替换取决于索引编号

String index value access这个问题是我之前问题的一部分

例1: 输入:S="abcd",索引=[0,2],源=["a","cd"],目标=["eee","ffff"] 输出:eeebffff 说明:a从S中的索引0开始,因此被eee替换。 cd从S中的索引2开始,因此被ffff替换

例2: 输入:S="abcd",索引=[0,2],源=["ab","ec"],目标=["eee","ffff"] 输出:“eeecd” 说明:"ab"从S中的索引0开始,因此被"eee"替换。 "ec"在原始的S中不是从索引2开始的,所以我们什么也不做

public class Q833 {
public static void main(String args[]){
    String S="abcd";
    int[] indexes  = {0, 2};
    String[]sources={"ab","cd"};
    String[] targets = {"eee", "ffff"};
    Solve833 ob833=new Solve833();
    System.out.println(ob833.findReplaceString(S,indexes,sources,targets));
}
}
 class Solve833{
 public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) {
    char[] array = S.toCharArray();
    StringBuilder result = new StringBuilder();
    int counter = 0;
    String s = "";
    for (String n:sources)
        s+= n;
    char[] c = s.toCharArray();

    for (int i = 0; i < array.length; i++) {
        if(array[indexes[counter]]==c[counter]){
            result.append(targets[counter]);
            if(counter<=indexes.length) {
                counter++;
            }

        }
        else
            result.append(array[i]);
    }


    return result.toString();
}

}

代码输出:例如第一个示例

预期输出:Output: "eeebffff"

我的输出:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at Leetcode.Solve833.findReplaceString(Q833.java:30) at Leetcode.Q833.main(Q833.java:16)

代码输出:第二个示例

预期输出:"eeecd"

我的输出:eeebcd。这里缺了一个b。我该怎么办


共 (1) 个答案

  1. # 1 楼答案

    你可以这样改变你的方法来打印结果

    public class Q833 {
        public static void main(String args[]) {
            String S = "abcd";
            int[] indexes = {0, 2};
            String[] sources = {"a", "cd"};
            String[] targets = {"eee", "ffff"};
            Solve833 ob833 = new Solve833();
            System.out.println(ob833.findReplaceString(S, indexes, sources, targets));
        }
    }
    
    class Solve833 {
        public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) {
            StringBuffer result = new StringBuffer(S);
            for (int i = 0; i < indexes.length; i++) {
                if (sources[i].equals(result.substring(indexes[i], indexes[i] + sources[i].length()))) {
                    result.replace(indexes[i], indexes[i] + sources[i].length(), targets[i]);
                    if (i < indexes.length - 1)
                        indexes[i + 1] = indexes[i + 1] + targets[i].length() - sources[i].length();
                }
            }
            return result.toString();
        }
    }