最小操作数 (错误笔记)

来源:互联网 发布:淘宝窗轮背景图 编辑:程序博客网 时间:2024/06/06 23:17

最少操作次数的简易版

题目详情

给定两个字符串,仅由小写字母组成,它们包含了相同字符。

求把第一个字符串变成第二个字符串的最小操作次数,

且每次操作只能对第一个字符串中的某个字符移动到此字符串中的开头。

例如给定两个字符串“abcd" "bcad" ,输出:2,

因为需要操作2次才能把"abcd"变成“bcad" ,方法是:abcd->cabd->bcad。


(以下思路感谢http://www.360doc.com/content/13/1219/09/10504424_338332083.shtml  及作者、)

提前说明一下:以下代码   考虑不完全  所以会有bug    

不要盲目相信  、、在此  只是想做个个人笔记、、

思路:将第二个字符串变成数组   并且给每个字符下面加一个  int  数,

记着  第二个字符数组的数 是从0开始逐个递增的   、

将第一个字符串也转换成字符数组   同第二个一样 增加一个 对应的  int 数组   

只不过这个int 数组的元素是按照  第二个数组对应的字符的int数  来赋值的  

例如: 第二个数组 字符:a b c  对应的int 型数字: 0 1 2 

第一个数组: c  b  a     对应的int 型数字 : 2  1  0

只需 将第一个字符数组的  int数组   排序即可    应用逆序数、、、每次找逆序数中最大的数

=============================================================

后来在oucyxc(灰常感谢)的帮助下  发现 这段代码有bug   即:不能正常排序有重复字符

例:String a=“xykkr”   String  b=“rykxk”   输出的结果是 2 、、明显不对、、

代码:

class Node {    private char ch;    private int x;    public Node(char c, int x1) {        ch = c;        x = x1;    }    public Node(char c){        ch = c;    }    public char getCh() {        return ch;    }    public void setCh(char ch) {        this.ch = ch;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    }public class Test {     static int [] cc=null;    static int z=0;   public static  int getNumber(String a,String b)    {   z=0;        char[] arr=b.toCharArray();               Node[] aa=new Node[arr.length];                for(int i=0;i<arr.length;i++){                        Node temp = new Node(arr[i],i);            aa[i] = temp;                                            }        char[] qq=a.toCharArray();        Node[] bb=new Node [qq.length];        for(int i=0;i<qq.length;i++){                        Node temp = new Node(qq[i]);            bb[i] = temp;                                }        for(int x=0;x<arr.length;x++){            for(int z=0;z<qq.length;z++){                if(aa[x].getCh()==bb[z].getCh()){                    bb[z].setX(aa[x].getX());                }            }                                }                cc=new int[bb.length];                for(int i=0;i<bb.length;i++){            cc[i]=bb[i].getX();        }        jk_sort(cc);        //System.out.println(z);        return z;    }              public static int[] jk_remove(int[] s, int index) {                int temp = s[index];               for (int i = index - 1; i >= 0; i--) {                     s[i + 1] = s[i];                }                s[0] = temp;                z++;                return s;             }                public static void jk_sort(int[] s) {            int temp ='\0';              int p=0;                         for(int i = 1; i < s.length; i++) {                for(int j = 0; j < i; j++) {                                     if(s[i] < s[j]) {                                              if(temp == '\0' || p < s[i]) {                            p=s[i];                             temp = i;                         }                                              break;                    }           }                       }                            if(temp != '\0') {                     int [] arr=  jk_remove(s, temp);                                                            jk_sort( arr);                  }                 else{                                     }         }          public static void main(String args[])     {       // System.out.println(getNumber("uyyrk","ukyry"));      System.out.println(getNumber("xykkr","rykxk"));    }     }

0 0
原创粉丝点击