这题仔细分析一下还是蛮简单的,利用正则表达式来做。正则表达式分为四种:a+,b+,a+b+,其它(这种正则表达式比较复杂)但没必要去判断它,直接贴代码了:
public class DerivationDisplay {
public String[] getDerivation(String input) {
String[] ans=null;
String p1="a+";
String p2="b+";
String p3="a+b+";//a+(a+|b+)b+
LinkedList<String> ll=new LinkedList<String>();
if(input.matches(p1)){
doP1(ll,input);
}else if(input.matches(p2)){
doP2(ll,input);
}else if(input.matches(p3)){
doP3(ll,input);
}else{
doP4(ll,input);
}
ans=ll.toArray(new String[0]);
return ans;
}
void doP1(LinkedList<String> ll,String input){
ll.add("S");
ll.add("T");
ll.add("A");
char c=input.charAt(0);
StringBuffer sb=new StringBuffer();
for(int i=0;i<input.length();i++){
sb.append(c);
ll.add(sb.toString()+(i==input.length()-1?"":"A"));
}
}
void doP2(LinkedList<String> ll,String input){
ll.add("S");
ll.add("T");
ll.add("B");
char c=input.charAt(0);
StringBuffer sb=new StringBuffer();
for(int i=0;i<input.length();i++){
sb.append(c);
ll.add(sb.toString()+(i==input.length()-1?"":"B"));
}
}
void doP3(LinkedList<String> ll,String input){
ll.add("S");
ll.add("T");
StringBuffer pre=new StringBuffer();
StringBuffer suf=new StringBuffer();
while(input!=null&&(!input.equals(""))&&input.charAt(0)=='a'&&input.charAt(input.length()-1)=='b'){
pre.append('a');
suf.append('b');
ll.add(pre.toString()+"T"+suf.toString());
input=input.substring(1,input.length()-1);
}
if(input.matches("a+")){
ll.add(pre.toString()+"A"+suf.toString());
for(int i=0;i<input.length();i++){
pre.append('a');
ll.add(pre.toString()+(i==input.length()-1?"":"A")+suf.toString());
}
}else if(input.matches("b+")){
ll.add(pre.toString()+"B"+suf.toString());
for(int i=0;i<input.length();i++){
pre.append('b');
ll.add(pre.toString()+(i==input.length()-1?"":"B")+suf.toString());
}
}//else
}
void doP4(LinkedList<String> ll,String input){
ll.add("S");
ll.add("bUa");
input=input.substring(1,input.length()-1);
StringBuffer pre=new StringBuffer();
pre.append('b');
StringBuffer suf=new StringBuffer();
suf.append('a');
while(input!=null&&!input.equals("")){
if(input.charAt(0)=='a'){
pre.append('a');
}else{
pre.append('b');
}
input=input.substring(1,input.length());
String con="";
if(input!=null&&!input.equals("")){
con="U";
}
ll.add(pre.toString()+con+suf.toString());
}//while
}
}
分享到:
相关推荐
topcoder的数学类算法题目。一个整数被称为k-smooth当且仅当它的最大素因子不大于k,给定N和K,计算出1 - N中有多少个整数是k-smooth。1 , 1 <= K <= 1000.
SRM2Multi dumper for hsap
2. **SRM服务器**:运行SRM软件的物理或虚拟服务器,操作系统需为Server 2008 x64。 3. **支持SRM的数据库**:这里指能够被SRM兼容的数据库系统,例如SQL Server 2005。该数据库用于存储SRM的相关配置信息。 4. **...
SAP SRM 介绍
Driver HASP SRM emulator (x86)
根据给定的文件信息,我们将深入探讨“SRM-MDM Catalog Setup – Ready Reference”这一主题,专注于SAP NetWeaver MDM系统中的SRM-MDM目录设置过程。这份文档不仅适用于SAP SRM(Supplier Relationship Management...
2. OMRON产品命名约定:OMRON公司产品的型号在本手册中都是以大写形式出现,包括“CPM1”,“CPM1A”,“CPM2A”,“CPM2C”,“SRM1(-V2)”等。这可能是为了方便阅读时对产品型号的快速识别。此外,手册中提到的...
2. **边界长度**:`srm_boundarylen.cpp`可能是用于计算相邻区域边界的长度,这是评估区域合并代价的另一个因素。较长的边界通常意味着更高的合并成本,因为这会引入更多的不确定性。 3. **SRM主程序**:`srm.m`是...
SRM空间富模型隐写分析算法,选区高维特征,使用集成分类器进行训练
HASP SRM加密狗简介 HASP SRM加密狗是一种软件保护解决方案,由阿拉丁公司开发。它提供了多种型号,以满足不同业务需要。下面将对HASP SRM加密狗的各种型号进行详细介绍。 首先是HASP HL基本型,这是阿拉丁公司最...
版本: 1.0.0 作者: Semen Zhydenko ... BridgeCrossingOptimized.java - SRM 146 DIV 2,1000 点问题,时间复杂度 O(n^(n^2))。 BridgeCrossingBest.java - SRM 146 DIV 2,1000 点问题,时间复杂度 O(n)。
SAP SRM(供应商关系管理)是一种 SAP 产品,有助于通过基于 Web 的平台采购货物。 组织可以采购所有类型的产品,如直接和间接材料,服务,这可以与 SAP ERP 模块和其他非 SAP 后端系统集成,用于会计和计划。 SAP...
【标题】"VSAN与SRM"涉及到的是VMware虚拟化环境中的两个关键组件:Virtual SAN(VSAN)和Site Recovery Manager(SRM)。这两个工具在企业级数据中心中发挥着至关重要的作用,确保业务连续性和灾难恢复能力。 VSAN...
根据给定的文件信息,我们可以提炼出以下关于SAP SRM(Supplier Relationship Management)的知识点,这主要聚焦于SAP SRM的配置、组件、版权信息以及先修课程建议。 ### SAP SRM概述 SAP SRM是SAP提供的一款用于...
**SRM系统资源管理器详解** SRM(System Resource Manager)系统资源管理器是一个专为Linux环境设计的工具,它的主要功能是作为一个守护进程在后台持续监控非root用户的进程,以便控制系统的CPU和内存(MEM)资源...
2. 扩展、加强与重要供应商的关系:SRM 能够帮助企业与其建立合作关系,共享计划、产品设计和规范信息,并运作方式上进行改进。 3. 建立竞争优势:SRM 能够主动地帮助企业去建立、改进与供应商之间的战略同盟,不是...
【标题】"SRM 210 供应商关系管理"涉及的是SAP的企业级采购解决方案,SAP Supplier Relationship Management(SRM)系统的一个特定版本。SRM 210是这个模块的一个迭代,旨在帮助企业更有效地管理和优化其与供应商的...
多年SRM实施经验总结,对希望从事SRM实施或规划的同学们有帮助
2. **合同管理**:制定明确的合同条款,确保双方权益,同时设定性能指标和违约处理机制。 3. **供应链协同**:通过信息共享,提高供应链的透明度,实现供需同步,减少库存和响应时间。 4. **供应商绩效评估**:...
分块描述SRM系统的作用:寻源、协同和考核 涉及具体的业务用途,供前期规划作参考,可根据实际情况调整,再考虑如何实现