确定两串乱序同构

来源:http://www.nowcoder.com/questionTerminal/164929d4acd04de5b0ee2d93047b3b20

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

思路说明:

这个题目描述里面“且考虑字符串重点空格”的意义描述不是很明确。

根据牛客网网友讨论和实际提交代码检测结果,感觉不像是要比较单词,而是直接比较字符。

毕竟是要把一个字符串strA调整字符顺序使得该字符串变得与字符串strB相等,所以关键不在于字符的顺序,而是字符出现的次数。

也就是说:假如strA与strB里面各个字符出现的次数对应相等,那么一定可以将strA变为strB。

所以统计strA中各个字符出现的次数并记录在countA[256]中,

然后统计strB各字符出现次数并记录在countB[256]中,

接着扫描countA[]和countB[],若是countA[i]==countB[i],i∈[0,255],则返回true,否则返回false。

时间: 2024-10-13 01:26:50

确定两串乱序同构的相关文章

1.3确定两串乱序同构

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

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

欢迎转载,请附出处: 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

【3】确定两串乱序

[题目] 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串重点空格. 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同.保证两串的长度都小于等于5000. [代码实现] 方法一:对字符排序比较 import java.util.*; public class Same { public boolean checkSam(String stringA,

查找字符串中相同连续字符串最多的子串,如果有两串长度相同取asc码 例如1233455 中是33

package test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; // 查找字符串中相同连续字符串最多的子串,如果有两串长度相同取asc码 例如1233455 中是33 /* 思路:新建一个map和字符数组,map中key为字符,value为连续字符个数:当第一次出现字符时,将字符存入m

质数串 乱搞

一个正整数x是质数,当且仅当x≥2且x不是任何一个[2,x−1]的数的倍数. 一个数字串是''质数串'',当且仅当它的每个非空连续子串表示的数字都是质数. 例子1:"373"是质数串,它的子串有"3"."37"."373"."7"."73"."3",这些串表示的数字都是质数. 例子2:"55"不是质数串,因为"55"这个子串表示

poj2774两串最长公共子串

http://poj.org/problem?id=2774 思路:后缀数组.(摘自罗穗骞的国家集训队论文)字符串的任何一个子串都是这个字符串的某个后缀的前缀.求 A 和 B 的最长公共子串等价于求 A 的后缀和 B 的后缀的最长公共前缀的最大值.如果枚举A和 B 的所有的后缀,那么这样做显然效率低下.由于要计算 A 的后缀和 B 的后缀的最长公共前缀,所以先将第二个字符串写在第一个字符串后面,中间用一个没有出现过的字符隔开,再求这个新的字符串的后缀数组.观察一下,看看能不能从这个新的字符串的后

两串前缀最长后缀

for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { if (a[i] == b[j]) { f[i][j] = f[i-1][j-1] + 1; } else { f[i][j] = 0; } } }