2020年5月28日字符串解码decodeString
默认格式;
class Solution {
public String decodeString(String s) {
}
}
解题思路:
字符串通过ascii编码判断当前的字符类型,然后分情况处理,如果是数字那就开始等待出现 ‘[’ 符号的出现,出现后读取字符串,直到出现’]'符号位置,上面的三个环节作为一整个周期,循环直到字符串的末尾。
感觉起来还是很简单的,因为之前做过图像的解码工作,所以应该比较容易实现,只是不知道会不会有一些更好的算法,总之先把代码写出来。
好吧,是我想的太简单了,看来需要使用递归。出现’['时将其递归。
这个算法是属于理清逻辑就能写出来的代码,我比较擅长,不过还没有优化所以复杂度较高,,今天工作太累了,就不做深入了。
StringBuilder res=new StringBuilder();
char[] chars=s.toCharArray();
int index=0;
String num="";
String sval="";
while (index<chars.length){
int num1=0;
//判断是数字
if (48<=chars[index]&&chars[index]<=57){
num+=chars[index];
}
//如果是'[',将其内部的字符串递归解码
else if (91==chars[index]){
//先找到与其对应的']'
if (!num.equals(""))
num1=Integer.decode(num);
int start=++index;
int c=1;
while (c!=0){
//层次计算,如果是']'减一层
if (chars[index]==93){
c--;
}
//如果是'['加一层
if (chars[index]==91)
c++;
index++;
}
int end=--index;
sval=s.substring(start,end);
sval=decodeString(sval);
for (int i=0;i<num1;i++){
res.append(sval);
}
sval="";
num="";
}else {
res.append(chars[index]);
}
index++;
}
return res.toString();