兄弟字符、版本号比较

542 阅读3分钟

兄弟字符:只通过了71.4%,难道漏了什么情况?知道的还望讨论补充。

问题:类似“abc”,"acb","cba"这样的调换两个字符顺序的字符串称为兄弟字符串,现输入两个字符串,判断是否为兄弟字符串,是则输出1,否则输出0。

输入输出示例:

示例一:

ab ba

1

示例二:

aa aa

1

示例三:

ab ab

0

分析:字符串处理问题。1)先比较两个字符串长度是否相同,长度是否为1,不同或长度为1的返回0。2)是否能找到不同的字母,找不到且长度不为1的返回1,找到了但数目不为2返回0(为0的是特殊情况),找到了且数目等于2则进入下一个判断。3)如果数目为0,若字符串类似“aa”这样由一个字母组成的,则返回1。4)找到2个不同的字母后,交换两个字母的位置,看两个字符串是否相同,相同返回1。

代码:

import java.util.ArrayList;

public class Test2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
String strA = "aa";
String strB = "aa";
int lenA = strA.length();
int lenB = strB.length();
if(lenA != lenB || lenA == 1){
System.out.println(0);
return;
}
int count = 0;//用来计不同字母的数量
char start = strA.charAt(0);//A的首个字母,用于比较A是否为全由同一个字母组成
int count2 = 0;//记录A中与A首字母相同的字母个数,用于比较A是否为全由同一个字母组成
ArrayList<Integer> list = new ArrayList<>();//用来保存不同字母的位置
for(int i=0; i<lenA; i++){
if(strA.charAt(i) != strB.charAt(i)){
count++;
list.add(i);
}
if(strA.charAt(i) == start){
count2++;
}
}
if(count == 0 && count2 == lenA){
System.out.println(1);
return;
}else if(count != 2){
System.out.println(0);
return;
}
char b1 = strB.charAt(list.get(0));
char b2 = strB.charAt(list.get(1));
String strC = "";
for(int i=0; i<lenA; i++){
if(i == list.get(0)){
strC += b2;
}else if(i == list.get(1)){
strC += b1;
}else{
strC += strB.charAt(i);
}
}
if(strA.equals(strC)){
System.out.println(1);
}else{
System.out.println(0);
}
}

}
版本号比较:已AC

问题:比较两个字符串所代表的版本号的大小,若A比B大,则输出1,相等输出0,小则输出-1。

输入输出示例:

示例一:

"7.2.3" "7.2.4"

1

示例二:

"7.0" "7.0.1"

-1

示例三:

"7.0" "7"

0

分析:字符串处理问题。和上题一样,要考虑全面才能全部通过。1.先遍历AB中长度相同的部分,A大于B,输出1,A小于B输出-1,A等于B,记录个数;2)若A等于B的个数与A的长度、B的长度都相等,则同输出0;3)若A的长度大于B,则A中剩下的只要有不为0的数,则输出1,否则输出0;4)若B的长度大于A,则B中剩下的只要有不为0的数,则输出-1,否则输出0。

代码:


public class Main{

public static void main(String[] args) {
// TODO Auto-generated method stub
String strA = "7.0.2";
String strB = "7.0.2";
strA = strA.replace(".", ",");
strB = strB.replace(".", ",");
String[] numA = strA.split(",");
String[] numB = strB.split(",");
int lenA = numA.length;
int lenB = numB.length;
int len = lenA>lenB? lenB : lenA;
int count = 0;
for(int i=0; i<len; i++){
int tempA = Integer.parseInt(numA);
int tempB = Integer.parseInt(numB);
if(tempA > tempB){
System.out.println(1);
return;
}else if(tempA < tempB){
System.out.println(-1);
return;
}else{
count++;
}
}
if(count == lenA && count == lenB){
System.out.println(0);
return;
}
if(lenA > lenB){
int res = 0;
for(int i = count; i<lenA; i++){
if(!numA.equals("0")){
res = 1;
}
}
System.out.println(res);
}else if(lenA <= lenB){
int res = 0;
for(int i = count; i<lenB; i++){
if(!numB.equals("0")){
res = -1;
}
}
System.out.println(-1);
}
}

}

---------------------
作者:另一个我竟然存在
来源:CSDN
原文:blog.csdn.net/qq_24034545…
版权声明:本文为博主原创文章,转载请附上博文链接!

更多学习资料可关注:annalin1203