|
| 1 | +class Solution{ |
| 2 | + /* |
| 3 | + 1.count=0; |
| 4 | + 2.循环内,如果不是最后一个元素,获取两个值,count++;如果是最后一个元素,跳转到第5步 |
| 5 | + 3.如果前一个值和下一个值相等,删除下一个值,数量加1,指针返回到前面,跳转到第2步 |
| 6 | + 如果不相等,看count数值, |
| 7 | + 4.数值大于1,指针到后面,添加新元素,count=0;跳转到第2步 |
| 8 | + 如果不大于1,count=0;跳转到第2步, |
| 9 | + 5.循环外,count大于1就添加新元素 |
| 10 | + 6.返回新数组长度 |
| 11 | + */ |
| 12 | + public static int compress(Vector<Character> chars){ |
| 13 | + int count=0; |
| 14 | + char c1; |
| 15 | + char c2; |
| 16 | + for (int i = 0; i < chars.size()-1; i++) { |
| 17 | + c1=chars.get(i); |
| 18 | + count++; |
| 19 | + c2=chars.get(i+1); |
| 20 | + if(c1==c2){ |
| 21 | + chars.remove(i); |
| 22 | + i--; |
| 23 | + }else{//不相等 |
| 24 | + if(count>1){//添加新元素,如:'1','5'等 |
| 25 | + if(count<10){ |
| 26 | + }else if(count>=10&&count<100){ |
| 27 | + chars.add(i+1,(char) (count/10%10+48)); |
| 28 | + }else if(count>=100&&count<1000){ |
| 29 | + chars.add(i+1,(char) (count/100+48)); |
| 30 | + chars.add(i+1,(char) (count/10%10+48)); |
| 31 | + }else if(count>=1000&&count<10000){ |
| 32 | + chars.add(++i,(char) (count/1000+48)); |
| 33 | + System.out.println(chars.get(i+1)); |
| 34 | + chars.add(++i,(char) (count/100%10+48)); |
| 35 | + chars.add(++i,(char) (count/10%10+48)); |
| 36 | + } |
| 37 | + chars.add(i+1,(char) (count%10+48)); |
| 38 | + } |
| 39 | + count=0; |
| 40 | + } |
| 41 | + } |
| 42 | + count++; |
| 43 | + if(count>1){ |
| 44 | + if(count<10){ |
| 45 | + }else if(count>=10&&count<100){ |
| 46 | + chars.add((char) (count/10%10+48)); |
| 47 | + }else if(count>=100&&count<1000){ |
| 48 | + chars.add((char) (count/100+48)); |
| 49 | + chars.add((char) (count/10%10+48)); |
| 50 | + }else if(count>=1000&&count<10000){ |
| 51 | + chars.add((char) (count/1000+48)); |
| 52 | + chars.add((char) (count/100%10+48)); |
| 53 | + chars.add((char) (count/10%10+48)); |
| 54 | + } |
| 55 | + chars.add((char) (count%10+48)); |
| 56 | + count=0; |
| 57 | + } |
| 58 | + System.out.println(chars); |
| 59 | + return chars.size(); |
| 60 | + } |
| 61 | + |
| 62 | + //测试运行 |
| 63 | + public static void main(String[] args) { |
| 64 | + char[] c = new char[1200]; |
| 65 | + c[0]='a'; |
| 66 | + c[1]='c'; |
| 67 | + c[2]='c'; |
| 68 | + for (int i = 3; i < 1198; i++) { |
| 69 | + c[i]='g'; |
| 70 | + } |
| 71 | + c[1198]='c'; |
| 72 | + c[1199]='c'; |
| 73 | + Vector<Character> chars= new Vector<>(); |
| 74 | + for (int i = 0; i < c.length; i++) { |
| 75 | + chars.add(c[i]); |
| 76 | + } |
| 77 | + int n= compress(chars); |
| 78 | + System.out.println("新数组长度:"+n); |
| 79 | + } |
| 80 | + } |
0 commit comments