package com.semovy.test;
/*面試題
* 一個字符串有N個從'a~z'用byte[N]表示,計劃如何節省空間去保存這個字符串?
*/
public class StringTest {
public static void main(String[] args) {
String str = "XAAABBCCCFFGGTTTKKabccccddddeeefffggzzzeeseeeseaa";
byte[] buf= str.getBytes();//題意
//創建至少足夠的二維存儲器,元素第一索引放字符的asii,元素第二索引放字符的數目
byte[][] nbuf = new byte[buf.length][2];
int count = 0;//相間除重復之后的字母數目
int flag = 0;//標志,0表示不重復,1表示重復
for(int i=0;i<buf.length;i++)
{
if(i != buf.length-1 && buf[i] == buf[i+1])//非最后一個并有重復時
flag = 1;
else
flag = 0;
if(i== 0)//第一個直接接收
{
nbuf[0][0] = buf[i];
nbuf[0][1] = 1;
}
if(flag == 0)//不重復
{
nbuf[count++][0] = buf[i];
nbuf[count][1] = 1;
}
else//重復
{
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());
}
}
運行結果:
1X3A2B3C2F2G3T2K1a1b4c4d3e3f2g3z2e1s3e1s1e2a