确定两串乱序

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了确定两串乱序相关的知识,希望对你有一定的参考价值。

【题目】

给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。
给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。

【代码实现】

方法一:对字符排序比较

import java.util.*;

public class Same {
    public boolean checkSam(String stringA, String stringB) {
        if(stringA == null ||  stringB == null || stringA.length() <= 0 || stringB.length() <= 0)
            return false;
        if (stringA.length() != stringB.length()){
            return false;
        }
        char[] arrA = stringA.toCharArray();
        char[] arrB = stringB.toCharArray();
        //根据每个字符的ASCII码大小进行排序(空格也会被排序)
        Arrays.sort(arrA);
        Arrays.sort(arrB);
        
        return Arrays.equals(arrA, arrB);
    }
}

 

方法二:使用HashMap:

链接:https://www.nowcoder.com/questionTerminal/164929d4acd04de5b0ee2d93047b3b20?toCommentId=535049
来源:牛客网

import java.util.*;
 
public class Same {
    public boolean checkSam(String stringA, String stringB) {
            if(stringA == null ||  stringB == null || stringA.length() <= 0 || stringB.length() <= 0)
            return false;
        if(stringA.length() != stringB.length())
            return false;
         
        Map<Character, Integer> map = new HashMap<>();
        for(int i = 0; i < stringA.length(); i++){
            if(map.containsKey(stringA.charAt(i))){
                map.put(stringA.charAt(i), map.get(stringA.charAt(i)) + 1);
            }else{
                map.put(stringA.charAt(i), 1);
            }
        }
         
        for(int i = 0; i < stringB.length(); i++){
            if(map.containsKey(stringB.charAt(i))){
                map.remove(stringB.charAt(i));
            }
        }
         
         
        if(!map.isEmpty()){
            return false;
        }
         
        return true;
    }
}

 

以上是关于确定两串乱序的主要内容,如果未能解决你的问题,请参考以下文章

确定两串乱序同构

1.3字符串-确定两串乱序同构

确定两串乱序同构

在 IOS 中,如何乱序播放音频片段的一部分?

一道面试题目

为啥下面两串代码中scanf和cin产生的效果不同?