首页 > 试题广场 >

字符串分类

[编程题]字符串分类
  • 热度指数:3832 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛有N个字符串,他想将这些字符串分类,他认为两个字符串A和B属于同一类需要满足以下条件:
A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。
现在牛牛想知道这N个字符串可以分成几类。

输入描述:
首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串,每个字符串长度不超过50。


输出描述:
输出一个整数表示分类的个数。
示例1

输入

4
abcd
abdc
dabc
bacd

输出

1
import java.util.*;
public class StringClassify {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        String[] str = new String[N];
        HashSet set = new HashSet();
        for (int i = 0; i < N; i++) {
            str[i] = sortStr(sc.next());
            set.add(str[i]);
        }
        System.out.println(set.size());
    }
    public static String sortStr(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }
}
编辑于 2017-11-16 15:36:31 回复(0)
import java.util.*;
public class StringClassify{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int num=in.nextInt();
        in.nextLine();
        String[] strs=new String[num];
        for(int i=0;i<num;i++){
            strs[i]=in.nextLine();
        }
        int result=numberOfClassStr(strs);
        System.out.println(result);
        
    }
    public static int numberOfClassStr(String[] strs){
     
        List<String[]> list=new ArrayList<String[]>();
        for(int i=0;i<strs.length;i++){
             String[] ss=strs[i].split("");
             Arrays.sort(ss);
             if(!contain(list,ss)){
                 list.add(ss);
             }
        }
        return list.size();
    }
    
    public static boolean contain(List<String[]> list,String[] ss){
        for(int i=0;i<list.size();i++){
            String[] tmp=list.get(i);
            if(tmp.length==ss.length){
                int j=0;
                for(j=0;j<ss.length;j++){
                    if(!ss[j].equals(tmp[j])){
                        break;
                    }
                }
                if(j==ss.length){
                    return true;
                }
            }else{
                continue;
            }
        }
        return false;
    }
}

发表于 2017-05-09 20:10:29 回复(2)
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class TestDemo5 
{
	public static void main(String [] args)
	{	
		int count=StrinClassifaction();
		System.out.println(count);
			
	}
	//字符串分类方法
	public static int StrinClassifaction()
		{
		Scanner scanner=new Scanner(System.in);
		int num=scanner.nextInt();
		String [] str=new String[num];
		for(int i=0;i<num;i++)
		{
		str[i]=mySort(scanner.next());
		}
		HashSet<String> set = new HashSet<String>();
		for(int i=0;i<str.length;i++)
		{
			set.add(str[i]);
			
		}
		return set.size();
		
		}
	//给字符串中的字符排序
	public static String mySort(String str)
	{
		char [] ch=str.toCharArray();//将字符串转成数组
		Arrays.sort(ch);//数组排序
		return String.copyValueOf(ch);//将数组专程字符串返回
	}
}

发表于 2017-03-31 17:12:09 回复(0)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner =new Scanner(System.in);  
int n = scanner.nextInt();  
ArrayList<char []> charslist=new ArrayList<char []>();
for(int i =0; i < n; i++) {
char []temp=scanner.next().toCharArray();
Arrays.sort(temp);
            charslist.add(temp);
        }
for(int i =0;i<charslist.size();i++){
for(int j=charslist.size()-1;j>i;j--){
//System.out.println(i+" "+j);
if(String.copyValueOf(charslist.get(i)).equals(String.copyValueOf(charslist.get(j))))
charslist.remove(j);
}
}
System.out.println(charslist.size());
}

}
先转成char[]再排序,然后比较char[],相同的删除,剩下的size就是个数

发表于 2017-03-24 17:47:06 回复(0)
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNextInt()) {
			int n = in.nextInt();
			int[][] count = new int[n][26];
			String[] str = new String[n];
			for (int i = 0; i < n; i++) {
				str[i] = in.next();
			}
			for (int i = 0; i < n; i++) {
				char[] array = str[i].toCharArray();
				for (int j = 0; j < array.length; j++) {
					count[i][array[j] - 'a']++;
				}
			}

			HashSet set = new HashSet<String>();
			for (int j = 0; j < n; j++) {
				String s = new String();
				for (int i = 0; i < 26; i++) {
					s += count[j][i];
				}
				set.add(s);
			}
			System.out.println(set.size());
		}
	}
}

编辑于 2017-03-24 15:01:44 回复(0)

热门推荐

通过挑战的用户