兄弟字符:只通过了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
原文:https://blog.csdn.net/qq_24034545/article/details/82697025
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|