最少操作次数的简易版
题目详情
(以下思路感谢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"));
}
}