String题——字符串数组改变顺序

陈帝凯

陈帝凯

发表于 2017-01-11 20:58:24

字符串数组元素调换位置 (正向&反向)

输入为一个字符串数组和一个int数组,输出的结果是该字符串数组通过int数组相应变换后得到的数组
For example: 输入["a", "b", "c", "d"] 和 [2, 0, 1, 3], 输出应该为["b", "c", "a", "d"], int数组第0个位置上的值为2, 表示"a"应该放到结果的第2个位置上
每次只要不停的交换字符串数组对应位置的值以及int数组对应位置的值即可,程序如下:

public static String[] getback(String[] s, int[] index) {
    for(int i = 0; i < index.length; i++) {
         if(index[i] == i) continue;
         while(index[i] != i) {
             int j = index[i];
             swapStr(s, i, j);
             swapInt(index, i, j);
         }
     }
     return s;
 }

输入为改变后的字符串数组和一个int数组,int数组的index表示原先的index,值表示现在的位置,输出的结果是原字符串
For example: 输入["b", "c", "a", "d"] 和 [2, 0, 1, 3], 输出应该为 ["a", "b", "c", "d"], int数组里第0个的值2表示string数组第2个位置上的值"a" 原先应该在第0个位置上

i = 0, j = index[i] = 2, 而index[j] = 1,表示s[1]上面的"c"应该被换到s[2]上面,所以交换index[j]和j上面的值,相应的index也要变换,把2换到第2位上,交换完成后,j对应的值为"c",已经回到本来的位置上了。同时,开始在第2位上的"a"换到第1个位置上index[0]对应的值也为1,所以a保持正确的位置。下一轮的i = 这一轮的j,所以接着交换上一轮上面index[j]对应的值,依次循环直到当前位置上的值被交换成原先的值为止。
同样是交换对应位置的值,不同的是string数组交换的值变为下一个:

public static String[] getback(String[] s, int[] index) {
    for(int i = 0; i < index.length; i++) {
        if(index[i] == i) continue;
        while(index[i] != i) {
             int j = index[i];
             swapStr(s, index[j], j);
             swapInt(index, i, j);
        }
    }
    return s;
 }

内容来源:https://segmentfault.com/a/1190000008078009

用户评论
开源开发学习小组列表