Anagram 字母易位词

2024-02-23 11:48
文章标签 字母 anagram 易位

本文主要是介绍Anagram 字母易位词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

两个单词如果包含有相同的字母,只是次序不同,则称这两个词为字母易位词,例如:"silent"和"listen".而"apple"和"aplee"就不是字母易位词。请用最小的算法复杂度来实现监测两个单词是否是字母易位词。

看到这个题,需要用最小的时间复杂度来判断,那么如果用比较一般的方法,比如用hashMap来实现,算法的时间复杂度就会比较高。那么就需要另辟蹊径,找一个简单的方法。关于字符串的题目,很多可以采用构造一个数组,其中,数组的长度表示26个字母,那么数组里的数字表示该字母在字符串中出现的次数。那针对这题,就可以用空间换时间,用O(n)的时间复杂度来完成,首先用一个字符串来扫描一遍整个数组,然后用另一个字符串去扫描该数组,如果出现数组中的数字小于该数组中的数字,那么就说明这两个字符串不是字母易位词。

    public static boolean isAnagram(String s1,String s2){int[] num = new int[26];if(s1.length() != s2.length())return false;for(int i = 0; i < s1.length(); i++){num[s1.charAt(i) - 'a']++;}for(int j = 0; j < s2.length(); j++){if(--num[s2.charAt(j) - 'a'] < 0)return false;}return true;}

此题在leetcode中貌似有类似的,以后碰到字符串的题目,很多都能用字符串数组来求解,方便快捷,同时时间复杂度还低,因此,这种思路是非常重要的。

这篇关于Anagram 字母易位词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738533

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

兔子--EditText去除下划线和输入字母和数字的限制

在设置密码输入框的时候,只允许输入数字和字母,设置如下属性:  android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 设置密码不可见(显示小黑点),并去除edittext的获取到焦点时候的下划线, 设置如下:

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

LeetCode438. 找到字符串中所有字母异位词(2024秋季每日一题 11)

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s = “cbaebabacd”, p = “abc” 输出: [0,6] 解释: 起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。 起始索引等于 6 的子串是

正则:数字、字母、特殊字符同时存在且长度不小于8位

(?![^a-zA-Z]+$)(?!\D+$)(?![a-zA-Z0-9]+$).{8,}$ 使用示例: function valPasswordFormatNew(){var result = true;var newPsd = jQuery("#newPsd").val();if(newPsd !=""){result = (/(?![^a-zA-Z]+$)(?!\D+$)(?![a-zA

Java中等题-去除重复字母(力扣)

给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的 字典序 最小(要求不能打乱其他字符的相对位置)。 示例 1: 输入:s = "bcabc"输出:"abc" 示例 2: 输入:s = "cbacdcbc"输出:"acdb" 这道题我没有思路,看了官方解题思路之后,思路梳理如下: 注:这道题适合经常复习 用一个数组pice[]来

java10: 猜字母

package day10;import java.util.Random;import java.util.Scanner;public class Demo01 {public static void main(String[] args) {char[] answer;char[] input;int[] result;int count = 0;System.out.println("

sqlserver2008r2查找非中文字母数字出现的第一个位置

环境: 测试数据库sqlserver2008r2,排序规则Chinese_PRC_CI_AS,其它环境没有试过 语句 select PATINDEX(‘%[^吖-咗a-zA-Z0-9]%’,’查找非 中文字母数字出现的第一个位置’) 返回值:4

特殊字符合集(包括各种emoji表情、windows ASCII字符、自定义字母图案等)

██████╗███████╗ ██████╗ ██╔════╝╚══███╔╝██╔═══██╗███████╗ ███╔╝ ██║ ██║╚════██║ ███╔╝ ██║▄▄ ██║███████║███████╗╚██████╔╝╚══════╝╚══════╝ ╚══▀▀═╝ Text to ASCII Art Generator (TAAG)http://pa