C++ 如何确定两个字符串是否同构? #包括 #包括 #包括 使用名称空间std; 布尔是同构的(字符串输入1,字符串输入2) { if(input1.length()!=input2.length()) 返回false; 向量差(26,-40);//用一些随机值初始化。 对于(int i=0;i
您还需要检查C++ 如何确定两个字符串是否同构? #包括 #包括 #包括 使用名称空间std; 布尔是同构的(字符串输入1,字符串输入2) { if(input1.length()!=input2.length()) 返回false; 向量差(26,-40);//用一些随机值初始化。 对于(int i=0;i,c++,C++,您还需要检查input1中的两个字符是否映射到input2中的同一个字符 #include <iostream> #include <string> #include <vector> using namespace std; bool is_isomorphic(string input1, string input2) { if(input1.length()!= input2.length()) return false;
input1
中的两个字符是否映射到input2
中的同一个字符
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool is_isomorphic(string input1, string input2)
{
if(input1.length()!= input2.length())
return false;
vector<int> diff_arr(26, -40);//Initialise with some random value.
for(int i = 0 ; i < input1.length(); i++){
if(diff_arr[input1[i]-'a'] == -40)
diff_arr[input1[i]-'a'] = input1[i] - input2[i];
else{
if(diff_arr[input1[i]-'a'] != input1[i] - input2[i])
return false;
}
}
return true;
}
int main() {
cout<<is_isomorphic("abcd", "aabb");
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
布尔是同构的(字符串输入1,字符串输入2)
{
if(input1.length()!=input2.length())
返回false;
设置Usedletter;
地图变换;
对于(int i=0;isecond==input2[i])继续;
否则返回false;
}
if(usedLetters.count(input2[i])返回false;
usedLetters.insert(input2[i]);
转换[input1[i]]=input2[i];
}
返回true;
}
int main(){
cout您还需要检查input1
中的两个字符是否映射到input2
中的同一个字符
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool is_isomorphic(string input1, string input2)
{
if(input1.length()!= input2.length())
return false;
vector<int> diff_arr(26, -40);//Initialise with some random value.
for(int i = 0 ; i < input1.length(); i++){
if(diff_arr[input1[i]-'a'] == -40)
diff_arr[input1[i]-'a'] = input1[i] - input2[i];
else{
if(diff_arr[input1[i]-'a'] != input1[i] - input2[i])
return false;
}
}
return true;
}
int main() {
cout<<is_isomorphic("abcd", "aabb");
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
布尔是同构的(字符串输入1,字符串输入2)
{
if(input1.length()!=input2.length())
返回false;
设置Usedletter;
地图变换;
对于(int i=0;isecond==input2[i])继续;
否则返回false;
}
if(usedLetters.count(input2[i])返回false;
usedLetters.insert(input2[i]);
转换[input1[i]]=input2[i];
}
返回true;
}
int main(){
cout您需要两个数组,一个用来知道input2的哪个字符对应于input1的给定字符,另一个用来检查input2的某个字符是否已经影响到input1的某个字符
#include <iostream>
#include <string>
#include <map>
#include <set>
using namespace std;
bool is_isomorphic(string input1, string input2)
{
if(input1.length()!= input2.length())
return false;
set<char> usedLetters;
map<char, char> transformations;
for(int i = 0 ; i < input1.length(); i++) {
auto iter = transformations.find(input1[i]);
if (iter != transformations.end()) {
if (iter->second == input2[i]) continue;
else return false;
}
if (usedLetters.count(input2[i])) return false;
usedLetters.insert(input2[i]);
transformations[input1[i]] = input2[i];
}
return true;
}
int main() {
cout<<is_isomorphic("abcd", "aabb");
return 0;
}
#包括
#包括
使用名称空间std;
布尔是同构的(常量字符串和输入1,常量字符串和输入2)
{
if(input1.length()!=input2.length()){
返回false;
}
字符映射[256]{};
布尔使用[256]{};
对于(大小i=0;i cout您需要两个数组,一个用来知道input2的哪个字符对应于input1的给定字符,另一个用来检查input2的某个字符是否已经影响到input1的某个字符
#include <iostream>
#include <string>
#include <map>
#include <set>
using namespace std;
bool is_isomorphic(string input1, string input2)
{
if(input1.length()!= input2.length())
return false;
set<char> usedLetters;
map<char, char> transformations;
for(int i = 0 ; i < input1.length(); i++) {
auto iter = transformations.find(input1[i]);
if (iter != transformations.end()) {
if (iter->second == input2[i]) continue;
else return false;
}
if (usedLetters.count(input2[i])) return false;
usedLetters.insert(input2[i]);
transformations[input1[i]] = input2[i];
}
return true;
}
int main() {
cout<<is_isomorphic("abcd", "aabb");
return 0;
}
#包括
#包括
使用名称空间std;
布尔是同构的(常量字符串和输入1,常量字符串和输入2)
{
if(input1.length()!=input2.length()){
返回false;
}
字符映射[256]{};
布尔使用[256]{};
对于(大小i=0;i 不可能重复当它点击第二个字母时,它会看到diff_数组['b']=-40
,并假设一切正常,即使a
已经被映射。当它点击第二个字母时,它会看到diff_数组['b']=-40
并假设一切正常,即使a
已映射。可能更简单的方法是在参数反转的情况下第二次调用is_同构
。可能更简单的方法是在参数反转的情况下第二次调用is_同构
。