【算法】字符串分类

题目:字符串分类,两个字符串A和B属于同一类需要满足以下条件:
A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。
输入:首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串
输出:输出一个整数表示分类的个数。
例子:

3
abc
bca
cab
1

解题要点:需要抓住同类字符串的共同点(含有相同字符),所以我们就利用这个共同点。先对每个字符串进行字符排序,那么同类的字符串进行排序后一定是相等的,然后用HashSet进行去重即可完成题目。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int n = sc.nextInt();
            if (n == 0) {
                continue;
            }
            String[] strs = new String[n];
            for (int i = 0; i < n; i++)  {
                strs[i++] = sc.nextLine();
            }
            System.out.println(classNum(strs));
        }
    }

    public static int classNum(String[] strs) {
        HashSet<String> set = new HashSet<String>();
        for (String s : strs) {
            char[] array = s.toCharArray();
            Arrays.sort(array);
            set.add(String.valueOf(array));
        }
        return set.size();
    }
}

注意点:采用has xxxx的话,后面也要用next xxxx。比如前面用hasNextLine,那么后面要用 nextLine 来处理输入。否则,你会遇到OJ的各种坑。

参考:
https://www.nowcoder.com/questionTerminal/9fbb4d95e6164cd9ab52e859fbe8f4ec?orderByHotValue=0&page=1&onlyReference=false

猜你喜欢

转载自blog.csdn.net/tb3039450/article/details/65934996