如果将增量设置为1,以下方法将正确移动字符串中的字符。当我将'k'的值设置得更高时,我会遇到困难。是什么原因引起的?

String cyclicLeftShift(String s, int k){

        String finalString = "";

        char[] newString = s.toCharArray();
        char[] secString = new char[newString.length];

        for(int r=0; r<k;r++){
            secString[secString.length-1]=newString[0];

        for(int i=0; i<s.length()-1; i++){
            secString[i]= newString[i+1];
        }
            newString = secString;
    }

        for(int c=0; c<secString.length; c++){
            finalString+=secString[c];
        }
        return finalString;
    }
}

最佳答案

问题是您不是每次都清除secString。您确实想要一个单独的局部变量。尽管您可能想更改变量名称,但以下修改后的代码可以工作:

static String cyclicLeftShift(String s, int k) {

    String finalString = "";

    char[] newString = s.toCharArray();
    char[] globalSecString = new char[newString.length];

    for(int r=0; r<k; r++) {
        char[] secString = new char[newString.length];
        secString[secString.length-1]=newString[0];

        for(int i=0; i<s.length()-1; i++) {
            secString[i]= newString[i+1];
        }
        newString = secString;
        globalSecString = secString;
    }

    for(int c=0; c<globalSecString.length; c++){
        finalString+=globalSecString[c];
    }
    return finalString;

08-16 00:41