SPOJ #4 Transform the Expression
Not hard to know it is simply transform from in-order to post-order.
My first idea is to build a tree from in-order string and then traverse the tree by post-order - naive so slow.
Subtle stack manipulation solves it - stack only for operators:
http://cs.nyu.edu/courses/Fall12/CSCI-GA.1133-002/notes/InfixToPostfixExamples.pdf
BTW, I love Ruby more.
# SPOJ #4 QNR cnt = gets
cnt = cnt.to_i #
def process(str)
stk = []
i = 0
while i < str.length do
c = str[i]
case c
when 'a'..'z'
print c
when '+', '-'
stk.push(c)
when '*', '/'
while !stk.empty? && (stk.last != '+' or stk.last != '-') do
if(stk.last == '(')
break
end
print stk.pop()
end
stk.push(c)
when '^'
while !stk.empty? && stk.last == '^' do
if(stk.last == '(')
break
end
print stk.pop()
end
stk.push(c)
when '('
stk.push(c)
when ')'
while !stk.empty? && stk.last != '(' do
if(stk.last == '(')
break
end
print stk.pop()
end
if(stk.last == '(')
stk.pop()
end
end
i += 1
end
while !stk.empty? do
print stk.pop()
end
puts
end # def process i = 0
while i < cnt do
str = gets.to_s.downcase
process(str)
i += 1
end
SPOJ #4 Transform the Expression的更多相关文章
- spoj ONP - Transform the Expression 中缀转后缀
题目链接 将中缀表达式转化为后缀表达式. 数字的话直接放到答案的字符串里. 如果是左括号就进栈, 右括号就让栈里的符号都出来直到第一个左括号. 否则的话比较当前符号的优先级和栈顶符号的优先级. #in ...
- codechef Transform the Expression 转换成逆波兰式
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- Java 计算数学表达式(字符串解析求值工具)
Java字符串转换成算术表达式计算并输出结果,通过这个工具可以直接对字符串形式的算术表达式进行运算,并且使用非常简单. 这个工具中包含两个类 Calculator 和 ArithHelper Calc ...
- 【Linux命令】linux一次性解压多个.gz或者.tar.gz文件
原文:linux一次性解压多个.gz或者.tar.gz文件 解压多个压缩包 对于解压多个.gz文件的,用此命令: for gz in *.gz; do gunzip $gz; done 对于解压多个. ...
- Java精选笔记_JSTL(JSP标准标签库)
JSTL(JSP标准标签库) JSTL入门 JavaServer Pages Standard Tag Library:JSP标准标签库 在JSP中可以通过Java代码来获取信息,但是过多的Java代 ...
- Expression Tree Basics 表达式树原理
variable point to code variable expression tree data structure lamda expression anonymous function 原 ...
- Expression Blend制作自定义按钮(转)
来源:http://www.cnblogs.com/iChina/archive/2011/11/25/2262854.html Expression Blend制作自定义按钮 1.从Blend工具箱 ...
- [HIve - LanguageManual] Transform [没懂]
Transform/Map-Reduce Syntax SQL Standard Based Authorization Disallows TRANSFORM TRANSFORM Examples ...
- Lambda Expression In Java
题记在阅读JDK源码java.util.Collections的时候在UnmodifiableCollection类中看到了这么一段代码: public void forEach(Consumer& ...
随机推荐
- PAT (Basic Level) Practise:1006. 换个格式输出整数
[题目链接] 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它 ...
- XACT_ABORT 用法
首先创建一张表 Create Table TranTable( Id INT IDENTITY(1,1) PRIMARY KEY, Priority TINYINT--最大值255) 1. ...
- 提示gtk错误,无法打开便器器(sudo gedit filename失败)
解决方法:安装gtksource,命令 sudo apt-get install gir1.2-gtksource-3.0
- Java-->用递归方法复制目录、子目录以及文件(文件用到IO流)
package com.dragon.java.newcopyfile; import java.io.File; import java.io.FileInputStream; import jav ...
- Hibernate--Enum类型的set集合映射到数据库(xml配置文件实现方式)
使用enum 存储Permission的值 package demo; public enum Permission { CREATE,DELETE,UPDATE;} Role与Permissi ...
- java加密与解密
1.下载:UnlimitedJCEPolicy 主要:获取权限文件2.把解压后的 local_policy.jar US_export_policy.jar 复制到 这个 ...
- dedecms 忘记后台密码
找到admin表 dede_admin,把其pwd的值修改为 默认的 字符串:f297a57a5a743894a0e4, 之后,你的密码就被充值为 admin
- hihoCoder #1301 : 筑地市场 (打表+构造)
题目大意:问含有4或者7的第k大的正数是多少. 题目分析:1~10.1~100.1~1000...之间的含有4或者7的个数可以求出,这样就可以从高位到地位依次确定这个数的每一位上的值. 代码如下: # ...
- Linux系统编程@进程管理(二)
1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...
- 怎么提高OCR文字识别软件的识别正确率
在OCR文字识别软件当中,ABBYY FineReader是比较好用的程序之一,但再好的识别软件也不能保证100%的识别正确率,用户都喜欢软件的正确率高一些,以减轻识别后修正的负担,很多用户也都提过这 ...