【3】确定两串乱序

【题目】

给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。
给定一个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;
    }
}
时间: 2024-08-08 10:47:08

【3】确定两串乱序的相关文章

1.3确定两串乱序同构

题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中有空格. 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同.保证两串的长度都小于等于5000. 测试样例: "This is nowcoder","is This nowcoder" 返回:true "Here you are","

确定两串乱序同构

来源:http://www.nowcoder.com/questionTerminal/164929d4acd04de5b0ee2d93047b3b20 题目描述给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串重点空格.给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同.保证两串的长度都小于等于5000.测试样例:"This is nowcoder&q

算法题——确定两串乱序同构

欢迎转载,请附出处: http://blog.csdn.net/as02446418/article/details/47145467 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串重点空格. 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同.保证两串的长度都小于等于5000. 测试样例: "This is nowcoder","

算法题:确定两串乱序同构

题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串重点空格. 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同.保证两串的长度都小于等于5000. 测试样例: "This is nowcoder","is This nowcoder" 返回:true "Here you are","

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

方法1 1 class Same { 2 public: 3 bool checkSam(string stringA, string stringB) { 4 // write code here 5 if(stringA.size()!=stringB.size()) 6 return false; 7 sort(stringA.begin(),stringA.end()); 8 sort(stringB.begin(),stringB.end()); 9 return stringA==s

DS之顺序表实现乱序输入顺序输出

顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出.今天就来用顺序表实现乱序输入,顺序输出(升序). 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 自己只需写一个排序的函数,排序函数的代码为: <span style="font-size:18px;">//排序函数 void paixu(SqList &L) { for(int i=0;i<L.

1-100的连续整数,乱序,重复一个数,丢失一个数,原地找出这两个数

问题描述: 1.比如inp={3,1,2,5,3}丢失了4,有两个3,原地找出这两个数. 2.为了方便起见这个连续数组从1开始: 解决: 1.元素3放在数组inp[3-1]的位置,该位置原来存的是2,再把2存入inp[2-1]…… 状态栏:     {0   -1     }     {0-1-1    }     {-1-1-1    }    {-1-1-1  -1}   {-1-1-1   -1} {3,1,2,5,3}     {3,1,2,5,3}     {3,1,2,5,3}   

1-100的连续整数,乱序,丢失两个数,原地找出这两个数

问题描述: 1.比如inp={2,3,6,4,7}丢失了1,5,原地找出这两个数. 2.为了方便讨论这个连续数组从1开始到7截至,数组扩展到7位inp={2,3,6,4,7,0,0}: 解决: 1.利用数组元素值与数组下标关系,遍历整个数组,没有被遍历到的位置则为丢失元素所在位置,具体流程如下: 1.从头开始读数组inp[0]=2,根据值2跳转到数组下标为inp[2-1]的位置,得到inp[2-1]=3: 2.修改状态:这个过程中inp[0]位置跳出过,但未跳入过,用0表示这种状态.修改inp[

笔试算法题(28):删除乱序链表中的重复项 &amp; 找出已经排好序的两个数组中的相同项

出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序: 分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字母对应位置为false的重新标记为true并保留节点,将字母对 应位置为true的保持并删除节点:时间复杂度为O(N),空间复杂度为常量.注意删除节点和不删除节点的情况下,pre和cur的移动操作不相同: 解题: 1 struct Node { 2 char value; 3 Node* next;