A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

兄弟字符:只通过了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
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马