题解 | #百分号解码-Java使用栈简单解决#

百分号解码

http://www.nowcoder.com/questionTerminal/79c892f6001b49d5a0680716e6f4f14d

思路:
使用一个栈,从后往前遍历字符串:

  • 如果不是"%"就压入栈
  • 如果是"%"就从栈顶取出两个字符组合成16进制并且转换为ASCII字符
    注意:
  • 16进制字符串转整型ASCII值可以直接使用Java包装类Integer提供的parseInte()方法
  • 整型ASCII值转字串常量可以直接强转
import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        String s = null;
        LinkedList<Character> stack;;
        for(int i = 0;i < t;i++) {
            stack = new LinkedList<>();
            s = sc.next();
            for(int j = s.length()-1;j >= 0;j--) {
                if(s.charAt(j) != '%') stack.addLast(s.charAt(j));
                else {
                    // 使用Integer提供的进制转换
                    String hex = new String(""+stack.removeLast()+stack.removeLast());
                    // 直接强转就可以得到对应的字符
                    char chr = (char)(Integer.parseInt(hex, 16));
                    // 如果转换结果得到“%”,就再进行一次
                    if(chr == '%') j++;
                    // 将得到的结果放入栈顶
                    else stack.addLast(chr);
                }
            }
            // 从后往前打印结果
            while(!stack.isEmpty()) System.out.print(stack.removeLast());
            System.out.println("");
        }
    }
}
全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务