昨天在csdn英雄会上做了道题,第五届在线编程大赛月赛指定题目:反向互。。。编译通过,提交后提示挑战失败,不知是程序哪块的问题。请大侠们帮忙指点一下噢。。
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ReverseComplement {
public static void main(String[] args) throws IOException {
System.out.println("请输入组数: ");
Scanner scan = new Scanner(System.in);
int i = Integer.parseInt(scan.nextLine());
List<String> list = new ArrayList<String>();
for (int t_ = 0; t_ < i; t_++) {
System.out.println("请输入第 " + (t_ + 1) + " 组: ");
StringBuffer sb = new StringBuffer();
char t = (char) (System.in.read());
while (t != '\n' && t != '\r') {
sb.append((char) t);
t = (char) (System.in.read());
}
// window系统
t = (char) (System.in.read());
list.add(sb.toString());
}
System.out.println("输出样例:");
for (i = 0; i < list.size(); i++) {
reverseComple(list.get(i));
}
}
/**
* 反转串方法
*
* @param inputStr
*/
private static void reverseComple(String inputStr) {
char b[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z' };
String reverseStr = ""; // 反转串
for (int i = 0; i < inputStr.length(); i++) {
for (int j = 0; j < b.length; j++) { // 查询出对应的反转字符
if (inputStr.charAt(i) == b[j]) {
reverseStr += b[(j + 13) % 26];
break;
}
}
}
// System.out.println("原串============"+inputStr);
// System.out.println("反转串============"+reverseStr);
// 查询互补子串
int retLength = 0;
for (int i = 0; i < reverseStr.length(); i++) { // 反转串
int rePos = i; // 反转串遍历开发位置
int tempLength = 0; // 此次查找反转串长度
int modCnt = 2; // 反转串允许剔除字符数量
int ePos = reverseStr.length();
for (int j = ePos - 1; j >= rePos; j--) { // 原串
if (reverseStr.charAt(rePos) == inputStr.charAt(j)) { // 反转串向后走,原串向前走
tempLength++;
rePos++;
// System.out.println("反转串向后走,原串向前走="+a.charAt(j));
} else if (tempLength > 0 && modCnt > 0) { // 原串向前走
modCnt--;
// System.out.println("//原串向前走 ="+a.charAt(j));
} else if (modCnt <= 0) { // 原串向前查找,寻找下一个匹配位置重新计数
if (retLength < tempLength) {
retLength = tempLength;
}
rePos = i;
tempLength = 0;
modCnt = 2;
j = --ePos;
// System.out.println("原串向前查找,寻找下一个匹配位置重新计数="+a.charAt(j)+"=====rePos"+rePos+"=====ePos="+ePos);
}
if (retLength < tempLength) {
retLength = tempLength;
}
}
}
System.out.println(retLength);
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ReverseComplement {
public static void main(String[] args) throws IOException {
System.out.println("请输入组数: ");
Scanner scan = new Scanner(System.in);
int i = Integer.parseInt(scan.nextLine());
List<String> list = new ArrayList<String>();
for (int t_ = 0; t_ < i; t_++) {
System.out.println("请输入第 " + (t_ + 1) + " 组: ");
StringBuffer sb = new StringBuffer();
char t = (char) (System.in.read());
while (t != '\n' && t != '\r') {
sb.append((char) t);
t = (char) (System.in.read());
}
// window系统
t = (char) (System.in.read());
list.add(sb.toString());
}
System.out.println("输出样例:");
for (i = 0; i < list.size(); i++) {
reverseComple(list.get(i));
}
}
/**
* 反转串方法
*
* @param inputStr
*/
private static void reverseComple(String inputStr) {
char b[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z' };
String reverseStr = ""; // 反转串
for (int i = 0; i < inputStr.length(); i++) {
for (int j = 0; j < b.length; j++) { // 查询出对应的反转字符
if (inputStr.charAt(i) == b[j]) {
reverseStr += b[(j + 13) % 26];
break;
}
}
}
// System.out.println("原串============"+inputStr);
// System.out.println("反转串============"+reverseStr);
// 查询互补子串
int retLength = 0;
for (int i = 0; i < reverseStr.length(); i++) { // 反转串
int rePos = i; // 反转串遍历开发位置
int tempLength = 0; // 此次查找反转串长度
int modCnt = 2; // 反转串允许剔除字符数量
int ePos = reverseStr.length();
for (int j = ePos - 1; j >= rePos; j--) { // 原串
if (reverseStr.charAt(rePos) == inputStr.charAt(j)) { // 反转串向后走,原串向前走
tempLength++;
rePos++;
// System.out.println("反转串向后走,原串向前走="+a.charAt(j));
} else if (tempLength > 0 && modCnt > 0) { // 原串向前走
modCnt--;
// System.out.println("//原串向前走 ="+a.charAt(j));
} else if (modCnt <= 0) { // 原串向前查找,寻找下一个匹配位置重新计数
if (retLength < tempLength) {
retLength = tempLength;
}
rePos = i;
tempLength = 0;
modCnt = 2;
j = --ePos;
// System.out.println("原串向前查找,寻找下一个匹配位置重新计数="+a.charAt(j)+"=====rePos"+rePos+"=====ePos="+ePos);
}
if (retLength < tempLength) {
retLength = tempLength;
}
}
}
System.out.println(retLength);
}
}
...全文
相关推荐
电赛历年试题&经验分享&代码程序资源.docx
#### 三、代码程序资源对于涉及编程和软件开发的电赛题目,代码程序资源是不可或缺的。以下是一些获取代码程序资源的途径:1.
75道逻辑思维题
### 逻辑思维题解析#### 题目1:如何仅用5升和6升的水壶取得3升水?**解题思路:**- 此题考察的是基本的数学运算能力和逻辑推理能力。- 第一步,将6升水壶装满水。
学习笔记图片从本地复制到csdn博客出现:外链图片转存失败(源码+jar包)
该项目旨在解决本地图片上传至CSDN博客时外链图片转存失败的问题,提供完整的源码与可执行Jar包。项目基于Java开发,使用Maven进行依赖管理,配置支持JDK 1.8,包含IDEA开发环境设置文件
csdn资源代码VB编程
**问题解答**:CSDN社区活跃,对于VB编程中遇到的问题,可以通过提问得到其他开发者的帮助和解答。4.
Ubuntu16.04下编译Pangolin时失败的解决方法
在Ubuntu 16.04环境下尝试编译Pangolin时,用户遇到了编译失败的问题。最初,他们从GitHub下载了最新版本的Pangolin,并确保安装了所有必要的依赖项。然而,在编译过程中,遇到两


