【算法题】LeeCode 回文排列

  • A+
所属分类:编程茶楼


共计 724 个字符,预计需要花费 2 分钟才能阅读完成。

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。

1 <= s.length <= 1000
s 由小写英文字母组成

示例1

输入:”tactcoa
输出:true(排列有”tacocat”、”atcocta”,等等)

import java.util.Scanner;

public class LeeCode_01_04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        System.out.println(canPermutePalindrome(line));
    }

    public static boolean canPermutePalindrome(String line) {
        char[] chars = line.toCharArray();
        int oneSingle = 0; // 奇数变量的个数
        int temp = 256; // 定义一个临时变量存储独一个变量
        for (int i = 0; i < chars.length; i++) {
            // 重复的奇数字符不再计入
            if (temp == chars[i]) {
                continue;
            }
            // 计数各个字符的个数
            int count = 0;
            for (int j = 0; j < chars.length; j++) {
                if (chars[i] == chars[j]) {
                    count++;
                }
            }

            if (count % 2 != 0) {
                oneSingle++;
                temp = chars[i];
            }
        }

        return oneSingle <= 1;
    }
}
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: