Anagram 由颠倒字母顺序而构成的字
2018-07-15 19:23:08
- Valid Anagram
问题描述:

问题描述:
可以使用map来记录各个字符出现的个数,在O(n)的时间复杂度内完成,当然也可以使用排序算法在O(nlogn)完成。
    public boolean isAnagram(String s, String t) {
        int[] alphabet = new int[26];
        for (int i = 0; i < s.length(); i++) alphabet[s.charAt(i) - 'a']++;
        for (int i = 0; i < t.length(); i++) alphabet[t.charAt(i) - 'a']--;
        for (int i : alphabet) if (i != 0) return false;
        return true;
    }
- Find All Anagrams in a String
问题描述:

问题求解:
可以使用滑动窗口在O(n)时间复杂度完成求解。
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> res = new ArrayList<>();
        if (p.length() > s.length()) return res;
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < p.length(); i++) {
            int temp = map.getOrDefault(p.charAt(i), 0);
            map.put(p.charAt(i), temp + 1);
        }
        int begin, end, count;
        begin = 0;
        end = 0;
        count = map.size();
        for (; end < s.length(); end++) {
            char c = s.charAt(end);
            if (map.containsKey(c)) {
                map.put(c, map.get(c) - 1);
                if (map.get(c) == 0) count--;
            }
            if (end - begin + 1 == p.length()) {
                if (count == 0) res.add(begin);
                char temp = s.charAt(begin);
                if (map.containsKey(temp)) {
                    // 这里需要注意,必须是第一次从0转成正count++
                    if (map.get(temp) == 0) count++;
                    map.put(temp, map.get(temp) + 1);
                }
                begin++;
            }
        }
        return res;
    }
- Group Anagrams
问题描述:

问题求解:
使用sort来判断是否为Anagram在本题中居然出奇的快,另外使用map来维护index。
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> res = new ArrayList<>();
        HashMap<String, Integer> map = new HashMap<>();
        for (String s : strs) {
            char[] temp = s.toCharArray();
            Arrays.sort(temp);
            String s2 = new String(temp);
            if (map.containsKey(s2))
                res.get(map.get(s2)).add(s);
            else {
                List<String> ls = new ArrayList<>();
                ls.add(s);
                res.add(ls);
                map.put(s2, res.size() - 1);
            }
        }
        return res;
    }
Anagram 由颠倒字母顺序而构成的字的更多相关文章
- 22. leetcode 242. Valid Anagram(由颠倒字母顺序而构成的字)
		22. 242. Valid Anagram(由颠倒字母顺序而构成的字) Given two strings s and t, write a function to determine if t i ... 
- Map的内容按字母顺序排序
		map有自带的排序功能,但需要重写排序方法,代码如下: package coreJava.com.shindo.corejava.map; import java.util.ArrayList; im ... 
- Python 单词字母顺序不变且所有倒排
		翻出google測试project师的一道题目: 设计一个函数,不论什么语言都能够,实现下面功能: 一个句子,将句子中的单词所有倒排过来,但单词的字母顺序不变.eg. this is a real ... 
- 对Array进行排序(按字母顺序)
		通过使用java.utils.Arrays.sort()和String.CASE_INSENSITIVE_OREDR,可以很容易的对结果进行排序(按字母顺序): String[] array = { ... 
- java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序
		package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ... 
- Java Object类 instanceof关键字 练习:判断是否为同一人  集合按照人的年龄排序,如果年龄相同按名字的字母顺序升序 Comparator比较器
		package com.swift; public class Same_Person_Test { public static void main(String[] args) { /* * Obj ... 
- 字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人
		输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 ... 
- 【C++ 字符串题目】 输入三个人名,按字母顺序排序输出
		题目来源:https://acm.ujn.edu.cn Problem A: [C++ 字符串] 输入三个人名,按字母顺序排序输出 Time Limit: 1 Sec Memory Limit: 1 ... 
- [Leetcode] Anagrams 颠倒字母构成词
		Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ... 
随机推荐
- Python2 简明教程
			Python 由 Guido Van Rossum 在90年代初创建. 它现在是最流行的语言之一 我喜爱python是因为它有极为清晰的语法,甚至可以说,它就是可以执行的伪代码. 注意: 这篇文章针对 ... 
- Linux基础命令---bzcat
			bzcat 解压缩被bzip2压缩过的文件,将文件解压到标准输出,此命令只有一个选项-s.该指令对压缩过的二进制文件没有意义,因为二进制文件没有可读性. 此命令的适用范围:RedHat.RHEL.Ub ... 
- angular Js 回车处理
			不说多的,就一个代码: <input type="search" class="am-form-field" placeholder="输入搜索 ... 
- 解析分布式锁之Zookeeper实现(一)
			实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,本文主要阐述基于Zookeeper的分布式锁,其他两种会在后文中一起探讨.现在我们来看下使用Zookeeper如 ... 
- Python Web学习笔记之IGMP和ICMP的差别
			理论技术:TCP/IP协议族(四)ICMP和IGMP协议! 应该先说IP协议的,后来考虑到层次性,还是先把支撑协议介绍完在细说IP!因为IP是我的最爱也是我的痛!呵呵! 一.ICMP协议 为什么要使用 ... 
- Python3 获取网络图片并且保存到本地
			Python3 获取网络图片并且保存到本地 import requests from bs4 import BeautifulSoup from urllib import request impor ... 
- Android 拖动条 和 Handle
- Hive-复制表
			非分区表复制 复制一张非分区表,使用CREATE TABLE IF NOT EXISTS AS SELECT * FROM tb_name;只复制表结构,CREATE TABLE IF NOT EXI ... 
- WordPress REST API 内容注入漏洞
			1 WordPress REST API 内容注入漏洞 1.1 摘要 1.1.1 漏洞介绍 WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统.在4.7.0版本后,R ... 
- 20145221高其_PC平台逆向破解_advanced
			20145221高其_PC平台逆向破解_advanced 实践目录 shellcode注入 Return-to-libc 攻击实验 shellcode注入 概述 Shellcode实际是一段代码(也可 ... 
