2531-使字符串总不同字符的数目相等

Raphael Liu Lv10

给你两个下标从 0 开始的字符串 word1word2

一次 移动 由以下两个步骤组成:

  • 选中两个下标 ij ,分别满足 0 <= i < word1.length0 <= j < word2.length
  • 交换 word1[i]word2[j]

如果可以通过 恰好一次 移动,使 word1word2 中不同字符的数目相等,则返回 true ;否则,返回 false

示例 1:

**输入:** word1 = "ac", word2 = "b"
**输出:** false
**解释:** 交换任何一组下标都会导致第一个字符串中有 2 个不同的字符,而在第二个字符串中只有 1 个不同字符。

示例 2:

**输入:** word1 = "abcc", word2 = "aab"
**输出:** true
**解释:** 交换第一个字符串的下标 2 和第二个字符串的下标 0 。之后得到 word1 = "abac" 和 word2 = "cab" ,各有 3 个不同字符。

示例 3:

**输入:** word1 = "abcde", word2 = "fghij"
**输出:** true
**解释:** 无论交换哪一组下标,两个字符串中都会有 5 个不同字符。

提示:

  • 1 <= word1.length, word2.length <= 105
  • word1word2 仅由小写英文字母组成。

就像题目的说的,每次只换一个字符,那我们模拟一下那个换字符的过程就好了,26*26这个数据量这么小,不暴力一下就对不起自己

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Solution {
public:
//统计每个字符串的字符
int char1[150]={0},char2[150]={0};
bool check()//看看不同字符数量是否相等 相等就返回对,然后程序结束
{
int cnt1=0,cnt2=0;
for(int i='a';i<='z';i++){
if(char1[i]>0){
cnt1++;
}
if(char2[i]>0){
cnt2++;
}
}
return cnt1==cnt2;
}


bool isItPossible(string word1, string word2) {

int len1=word1.length();
int len2=word2.length();
for(int i=0;i<len1;i++){
char1[word1[i]]++;
}
for(int i=0;i<len2;i++){
char2[word2[i]]++;
}
//模拟换的过程
for(int i='a';i<='z';i++){
for(int j='a';j<='z';j++){
if(char1[i]==0||char2[j]==0)
{
continue;
}
char1[i]--;
char1[j]++;
char2[i]++;
char2[j]--;
//判断是否相等
if(check()){
return true;
}
//回归原状
char1[i]++;
char1[j]--;
char2[i]--;
char2[j]++;
}
}
return false;
}
};
 Comments
On this page
2531-使字符串总不同字符的数目相等