首页 > 试题广场 >

字符串异构同质判定

[编程题]字符串异构同质判定
  • 热度指数:2445 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
请编码实现一个命令行工具,判定两个指定的字符串是否异构同质;异构同质的定义为:一个字符串的字符重新排列后,能变成另一个字符串。

输入描述:
以空格字符分隔的两个字符串;输入字符串的合法字符集为[a-zA-Z0-9 ],大小写敏感,无需考虑异常输入场景。


输出描述:
如果判定两个字符串异构同质,则输出true,否则输出false。
示例1

输入

abc acb

输出

true

备注:
2020秋招-后台1
字符串转成char数组,利用工具类Arrays的sort方法排序,再比较字符。
import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            String str1=in.next();
            String str2=in.next();
            char []ch1=str1.toCharArray();
            Arrays.sort(ch1);
            char []ch2=str2.toCharArray();
            Arrays.sort(ch2);
            int flag=0;
            for(int i=0;i<ch1.length;i++){
                if(ch1[i]!=ch2[i]){
                    flag=1;
                    break;
                }
            }
            if(flag==0)System.out.println("true");
            else System.out.println("false");
        }
    }
}

发表于 2020-02-15 17:39:36 回复(0)
from collections import Counter
s1, s2 = input().split()
c1 = Counter(s1)
c2 = Counter(s2)
if c1 == c2:
    print('true')
else:
    print('false')

发表于 2020-01-10 17:34:31 回复(6)
python
a,b = input().split()
alist = list(a)
blist = list(b)
 
alist.sort()
blist.sort()
 
matches = True
pos = 0
 
while pos < len(a) and matches:
    if alist[pos] == blist[pos]:
        pos = pos + 1
    else:
        matches = False
         
print(str(matches).lower())

发表于 2020-03-20 16:49:31 回复(1)
用O(n)复杂度解决这个题,首先判断这两个字符串str1.length和str2.length相不相等,不相等肯定不是异构同质。然后根据索引遍历字符串,用一个map计数,遇到str1的字符相应字符的计数就自增,否则相应字符的计数就自减。最后检查是否map中所有键对应的值都为0,都为0说明str1和str2中的字符都是一样的,全部被抵消了。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] strs = br.readLine().trim().split(" ");
        if(strs[0].length() != strs[1].length()){
            System.out.println(false);
        }else{
            HashMap<Character, Integer> counter = new HashMap<>();
            for(int i = 0; i < strs[0].length(); i++){
                char c1 = strs[0].charAt(i);
                char c2 = strs[1].charAt(i);
                counter.put(c1, counter.getOrDefault(c1, 0) + 1);
                counter.put(c2, counter.getOrDefault(c2, 0) - 1);
            }
            for(char key: counter.keySet()){
                if(counter.get(key) != 0){
                    System.out.println(false);
                    return;
                }
            }
            System.out.println(true);
        }
    }
}

发表于 2021-08-31 15:53:52 回复(0)
var line = readline().split(' ');
var line_1 = line[0].split(',');
line_1 = line_1[0].split('');
var line_2 = line[1].split(',');
line_2 = line_2[0].split('');
 
for (i = 0; i < line_1.length; i++){
    for (j = 0; j < line_2.length; j++){
        if (line_1[i] == line_2[j]){
            line_1.splice(i,1);
            line_2.splice(j,1);
            i--;
            j--;
        }
    }
}
 
if (line_1.length == 0 && line_2.length == 0){
    console.log(true);
}else{
    console.log(false);
}

发表于 2020-03-23 18:30:28 回复(0)
python
str1, str2 = input().split(' ')
def check(str1, str2):
    if len(str1) != len(str2):
        return 'false'
    dic1, dic2 = {}, {}
    for i in str1:
        if i not in dic1:
            dic1[i] = 1
        else:
            dic1[i] += 1
    for j in str2:
        if j not in dic2:
            dic2[j] = 1
        else:
            dic2[j] += 1
    keys = list(dic1.keys())
    for key in keys:
        if key in dic2 and dic1[key] == dic2[key]:
            dic1.pop(key)
            dic2.pop(key)
        else:
            return 'false'
    if dic2:
        return 'false'
    return 'true'
print(check(str1, str2))


发表于 2020-02-27 19:06:42 回复(0)

      😁
int main(){
char str1[30]={0};
char str2[30]={0};
scanf("%s",str1);
scanf("%s",str2);
int len1=strlen(str1);
int len2=strlen(str2);
    int i, j, min;
char t;
    for (i = 0; str1[i] != 0; i++)
    {
        min = i;
        for (j = i + 1; str1[j] != 0; j++)
        {
            if (str1[j] < str1[min])
                min = j;
        }
        t = str1[i];
        str1[i] = str1[min];
        str1[min] = t;
    }
for (i = 0; str2[i] != 0; i++)
    {
        min = i;
        for (j = i + 1; str2[j] != 0; j++)
        {
            if (str2[j] < str2[min])
                min = j;
        }
        t = str2[i];
        str2[i] = str2[min];
        str2[min] = t;
    }
if(strcmp(str1,str2)==0 ){
    printf("true");
}else{
printf("false");
}
return 0;
}

发表于 2020-01-10 00:15:15 回复(0)
如果两个字符串是同分异构的话,那他们一定拥有着相同的字母,因此他们总的 ASCII值肯定是一样的,以此作为比较。
#include<stdio.h>
#include<string.h>

int compare(const char *str,const char * pst)
{
	int key=0;
	while ((*str != '\0')|| (*pst != '\0'))
	{
		key += (*str - *pst);
		str++;
		pst++;
	}
	if ((*str == '\0') && (*pst == '\0') && (key == 0))
	{
		return 1;
	}
	return 0;
}
int main()
{
	char str[100] ;
	char pst[100] ;
	gets(str);
	gets(pst);
	if (compare(str, pst))
	{
		printf("true\n");
	}
	else
	{
		printf("false\n");
	}
	return 0;
}

发表于 2020-02-17 12:45:06 回复(2)
import java.util.*;


public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str1 = in.next();
        String str2 = in.next();
        //Set<Character> set = new HashSet<Character>();
        char[] arrstr1 = str1.toCharArray();
        char[] arrstr2 = str2.toCharArray();
        Arrays.sort(arrstr1);
        Arrays.sort(arrstr2);
        if(arrstr1.length == arrstr2.length){
            for(int i = 0; i < arrstr1.length; i++){
                if(arrstr1[i]!=arrstr2[i]){
                    System.out.println("false");
                    return;
                }
            }
            System.out.println("true");
        }else{
            System.out.println("false");
        }

    }
}
发表于 2022-08-04 11:17:01 回复(0)
s1,s2 = input().split()
s1 = [i for i in s1]
s2 = [i for i in s2]
if sorted(s1) == sorted(s2):
    print("true")
else:
    print("false")

发表于 2021-09-01 17:42:46 回复(0)
//暴力
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);


        String a = in.next();
        String b = in.next();


        int maxLength = 0;
        Set<String> set = new HashSet<>();
        if (a.length() > b.length()) {
            String temp = a;
            a = b;
            b = temp;
        }
        for (int i = 0; i < a.length(); i++) {
            for (int j = i+1 ; j < a.length()+1; j++) {
                String key = a.substring(i, j);
                if (j - i >= maxLength && b.contains(key)){
                   set.add(key);
                    maxLength = j-i;
                }
            }
        }
        for (String s : set) {
            if (s.length()==maxLength)
                System.out.println(s);
        }

          


    }
}
发表于 2021-03-26 12:48:00 回复(0)
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String[] str = sc.nextLine().split(" ");
            boolean result  = findDifferent(str[0],str[1]);
            System.out.println(result);
        }




    }
    public static boolean findDifferent(String str1,String str2){
        char[] char1 = str1.toCharArray();
        char[] char2 = str2.toCharArray();
        HashMap<Character,Integer> map = new HashMap<>();
        for(int i=0;i<char1.length;i++){
            map.put(char1[i],i);
        }
        for(int i=0;i<char2.length;i++){
            if(map.containsKey(char2[i])){
                continue;
            }else{
                return false;

            }
        }
        return true;
    }

}

发表于 2020-09-07 21:11:30 回复(1)
#include<iostream> 
#include<map>

using namespace std;

int main() {
	string s1; string s2;
	while (cin >> s1 >> s2) {
		if (s1.empty() && s2.empty()) {
			cout<<"false"<<endl;
			continue;
		}
		if (s1.size() != s2.size()) {
			cout<<"false"<<endl;
			continue;
		}
		map<char, int> m1;
		map<char, int> m2;
		for (auto x : s1) {
			m1[x]++;
		}
		for (auto x : s2) {
			m2[x]++;
		}
		map<char, int>::iterator it1 = m1.begin();
		map<char, int> ::iterator it2 = m2.begin();
		for (; it1 != m1.end() && it2 != m2.end(); ) {
			if (it1->first == it2->first && it1->second == it2->second) {
				++it1; ++it2;
			}
			else {
				cout <<"false"<< endl;
				break;
			}
			
		}
		if (it1 == m1.end() && it2 == m2.end()) {
			cout<<"true"<<endl;
		}
	}
	system("pause");
	return 0;
}
C++使用map解决此类问题,逻辑简单
发表于 2020-08-06 11:17:42 回复(0)
def Compare():
    s = input('请输入两字符串,以空格隔开:')
    s1,s2 =s.split(' ')[0],s.split(' ')[1]
    new_s1,new_s2 = list(s1),list(s2)
    new_s1.sort()
    new_s2.sort()
    if len(new_s1) != len(new_s2):
        return False
    else:
        n = []
        for i in range(len(new_s1)-1):
            if new_s1[i] == new_s2[i]:
                pass
            else:
               n.append(i)
               break
        if len(n)==0:
            return True
        else:
            return False
print(Compare())

发表于 2020-07-02 13:22:19 回复(0)
public class PingAn1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        String[] s = str.split(" ");
        if (s[0].length() != s[1].length()) {
            System.out.println("false");
            return;
        }

        //可以合并到一个字典里面 26+26+10 设置好偏移量
        int[] charDict1 = new int[26];
        int[] charDict2 = new int[26];
        int[] numDict = new int[10];

        for (int i = 0; i < s[0].length(); i++) {
            char c1 = s[0].charAt(i);
            char c2 = s[1].charAt(i);
            if (c1 >= 'a' && c1 <= 'z') {
                charDict1[c1 - 'a']++;
            } else if (c1 >= 'A' && c1 <= 'Z') {
                charDict2[c1 - 'A']++;
            } else if (c1 >= '0' && c1 <= '9') {
                numDict[c1 - '0']++;
            }

            if (c2 >= 'a' && c2 <= 'z') {
                charDict1[c2 - 'a']--;
            } else if (c2 >= 'A' && c2 <= 'Z') {
                charDict2[c2 - 'A']--;
            } else if (c2 >= '0' && c2 <= '9') {
                numDict[c2 - '0']--;
            }
        }

        for (int i = 0; i < charDict1.length; i++) {
            if (charDict1[i] != 0 || charDict2[i] != 0 || (i < 10 && numDict[i] != 0)) {
                System.out.println("false");
                return;
            }
        }
        System.out.println("true");
    }

发表于 2020-06-04 14:22:06 回复(0)
[a, b] = input().split()
ac = [c for c in a]
bc = [c for c in b]
if sorted(ac) == sorted(bc):
    print("true")
else:
    print("false")


发表于 2020-06-02 08:34:57 回复(0)
js实现:
let line = readline().split(' ')
let first = line[0].split('')
let second = line[1].split('')
for(let i = first.length; i >= 0; i--){
    for (let j = second.length; j >= 0; j--) {
        if (first[i] == second[j]){
            first.splice(i,1)
            second.splice(j,1)
        }
    } 
}
console.log(first.length === 0 && second.length === 0) 

发表于 2020-04-22 15:50:03 回复(0)
var strs = readline().split(" ");
var str1 = strs[0].split("").sort().join('');
var str2 = strs[1].split("").sort().join('');
console.log(str1==str2)
发表于 2020-04-09 16:43:47 回复(0)
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm> 

using namespace std;

int main(){
	char str1[30]={0};
	char str2[30]={0};
	scanf("%s",str1);
	scanf("%s",str2);
	
	int len1=strlen(str1);
	int len2=strlen(str2);
	bool flag=false;
	int count=0;
	if(len1==len2){
		sort(str1,str1+len1);
		sort(str2,str2+len2);
		for(int i=0;i<len1;i++){
			int n,m;
			n=str1[i];
			m=str2[i];
			if(n==m){
			count++;
			}
		}
		if(count==len1){
			flag=true;
		}
	}
	
	if(flag==false){
		printf("false");
	}
	else printf("true");
	
	return 0;
} 

编辑于 2020-03-23 18:47:47 回复(0)
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String str1 = input.split(" ")[0];
        String str2 = input.split(" ")[1];
        System.out.println(judge(str1, str2));
    }

    private static boolean judge(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }
        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();
        int sum = 0;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if (arr2[j] != '-') {
                    if (arr2[j] == arr1[i]) {
                        arr2[j] = '-';
                        sum++;
                        break;
                    }
                }
            }
        }
        return sum == str1.length();
    }
}

发表于 2020-03-08 14:14:41 回复(0)