Posted on 2008-04-24 16:15
semovy 閱讀(264)
評論(0) 編輯 收藏 所屬分類:
JAVA基礎(chǔ)
package com.semovy.test;
/*面試題
* 一個(gè)字符串有N個(gè)從'a~z'用byte[N]表示,計(jì)劃如何節(jié)省空間去保存這個(gè)字符串?
*/
public class StringTest {
public static void main(String[] args) {
String str = "XAAABBCCCFFGGTTTKKabccccddddeeefffggzzzeeseeeseaa";
byte[] buf= str.getBytes();//題意
//創(chuàng)建至少足夠的二維存儲器,元素第一索引放字符的asii,元素第二索引放字符的數(shù)目
byte[][] nbuf = new byte[buf.length][2];
int count = 0;//相間除重復(fù)之后的字母數(shù)目
int flag = 0;//標(biāo)志,0表示不重復(fù),1表示重復(fù)
for(int i=0;i<buf.length;i++)
{
if(i != buf.length-1 && buf[i] == buf[i+1])//非最后一個(gè)并有重復(fù)時(shí)
flag = 1;
else
flag = 0;
if(i== 0)//第一個(gè)直接接收
{
nbuf[0][0] = buf[i];
nbuf[0][1] = 1;
}
if(flag == 0)//不重復(fù)
{
nbuf[count++][0] = buf[i];
nbuf[count][1] = 1;
}
else//重復(fù)
{
nbuf[count][0] = buf[i];
nbuf[count][1] ++;
}
}
//存儲和顯示
StringBuffer sb = new StringBuffer();
for(int i=0;i<count;i++)
{
sb.append(nbuf[i][1]);
sb.append((char)nbuf[i][0]);
}
System.out.print(sb.toString());
}
}
運(yùn)行結(jié)果:
1X3A2B3C2F2G3T2K1a1b4c4d3e3f2g3z2e1s3e1s1e2a