2022-02-19(438. 找到字符串中所有字母异位词)

2024-04-07 23:38

本文主要是介绍2022-02-19(438. 找到字符串中所有字母异位词),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方法1 简单模拟:sMap存储每种情况

思路就很直观,有的喜欢叫滑动窗口,我还是把这个归为简单模拟吧

class Solution {Map<Character,Integer> sMap;Map<Character,Integer> pMap;public List<Integer> findAnagrams(String s, String p) {sMap =new HashMap<>();pMap =new HashMap<>();int sLength=s.length();int pLength=p.length();List<Integer> result=new ArrayList<>();if(pLength>sLength){return result;}//将p的所有字符放入pMapfor(int i=0;i<pLength;++i){char c=p.charAt(i);pMap.put(c,pMap.getOrDefault(c,0)+1);}//将s的前pLength个字符放入sMapfor(int i=0;i<pLength;++i){char c=s.charAt(i);sMap.put(c,sMap.getOrDefault(c,0)+1);}if(same()){result.add(0);}for(int i=1;i<=sLength-pLength;++i){    sMap.put(s.charAt(i-1),sMap.get(s.charAt(i-1))-1);sMap.put(s.charAt(i+pLength-1), sMap.getOrDefault(s.charAt(i+pLength-1),0)+1 );if(same()){result.add(i);}}return result;}//比较sMap和pMap是否相同public boolean same(){for(Map.Entry<Character,Integer> oneMap:sMap.entrySet()){if(pMap.getOrDefault(oneMap.getKey(),0)!=oneMap.getValue()){return false;}}return true;}
}

1 第59个用例没过,写的是解答错误,但我实在是不知道是为啥。
在这里插入图片描述
后来看了解答在same函数那里给两个值加了.intValue()才过了。而且给任意一个值加一个.intValue()就可以。但两个都不加就不行。

    //比较sMap和pMap是否相同public boolean same(){for(Map.Entry<Character,Integer> oneMap:sMap.entrySet()){//给任意一个值加一个.intValue()就可以,没必要像我一样加两个if(pMap.getOrDefault(oneMap.getKey(),0).intValue()!=oneMap.getValue().intValue()){return false;}}return true;}

后来我想到了Integer类型不能用==或者!=进行比较呀!!!

里面有缓存的机制,所以之前58个用例的值碰巧在-128~127范围内才通过了,而这个值超过了127所以必须用equals()!!!改了后果断通过

    public boolean same(){for(Map.Entry<Character,Integer> oneMap:sMap.entrySet()){if(!pMap.getOrDefault(oneMap.getKey(),0).equals(oneMap.getValue())){return false;}}return true;}

这篇关于2022-02-19(438. 找到字符串中所有字母异位词)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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 (

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

C和指针:字符串

字符串、字符和字节 字符串基础 字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。 字符串长度就是字符串中字符数。 size_t strlen( char const *string ); string为指针常量(const修饰string),指向的string是常量不能修改。size_t是无符号数,定义在stddef.h。 #include <stddef.h>

PHP字符串全排列

方法一: $str = 'abc';$a =str_split($str);perm($a, 0, count($a)-1);function perm(&$ar, $k, $m) {if($k == $m){ echo join('',$ar), PHP_EOL;}else {for($i=$k; $i<=$m; $i++) {swap($ar[$k], $ar[$i]);perm($ar

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

十一、C语言:字符串函数

目录 一、strlen 二、strcpy 三、strcat  四、strcmp 五、strstr 六、strtok 七、strerror 一、strlen 注意:strlen()函数的返回值是size_t,两个size_t相减仍为无符号数 int main(){char arr[10] = "abc";char brr[10] = "abc123";if (strl

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

Collection的所有的方法演示

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class TestCollection {/*** @param args* Collection的所有的方法演示* 此程序没有使用泛型,所以可以添加任意类型* 以后如果写到泛型会补充这一方面的内容*/public s