这是去一个小公司遇到的机试题,当时花了一个多小时写完的,但是有很多细节没考虑好,题目如下:
请您用Java语言实现两个函数encode()和decode(),分别实现对字符串的变换和复原.变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
(1)若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;
(3)若已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
(4)以上述一次变换为一组,在不同组之间另插入一个下划线’_’用于分隔;
(5)若已知字符串中包含有下划线’_’,则变换为 ”\UL” 。
复原函数decode()做变换函数encode()的相反的工作.按照上述规则逆运算,变回原来的字符串。
例如:encode()函数对字符串24ab_2t2的变换结果为 444_aaaaa_a_b_\UL_ttt_t_2
今天再写就顺畅多了,速度也快很多,先看encode()代码如下:
public String encode(String str){
int len = str.length();
StringBuilder sb = new StringBuilder();
char c;// current char
char cnext;// next char
for(int i=0;i<len;i++){
c = str.charAt(i);
if((c<='0' || c>'9')&& c!='_'){