首页 > 其他分享 >9.找到字符串中所有字母异位词

9.找到字符串中所有字母异位词

时间:2023-11-09 11:56:55浏览次数:30  
标签:子串 src String 异位 字母 字符串

题目概述:给定字符串s,p,找到s字符串子串中所有p的异位词,返回该字串的起始位置。异位词:由相同字母组成。
解题思路:由于其给定了p,所以枚举s中和p长度相同的子串,并判断是否为p的异位词(将p和子串都进行排序处理,再使用equals判断)。需要注意的是java中的substring(i,j)方法,获取的是[i,j)左闭右开的子串,i和j都表示索引。另一种优化做法就是:维护一个长度为p.length()的滑动窗口,窗口中维护p和窗口中每种字母数量的差值,只需判断该差值是否为0即可判断是否为p的异位词。
时间复杂度:\(O(n)\)
代码

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer>res = new ArrayList<>();
        char src[] = p.toCharArray();
        Arrays.sort(src);
        String pp = new String(src);
        int len = p.length();
        for(int i = 0; i <= s.length() - len; i ++){
            String str = s.substring(i,i + len);//第一个参数表示起始位置,第二个参数
            //表示终止位置(不包含该位置)
            char ss[] = str.toCharArray();
            Arrays.sort(ss);
            String sss = new String(ss);
            if(pp.equals(sss))res.add(i);
        }

        return res;
    }
}

标签:子串,src,String,异位,字母,字符串
From: https://www.cnblogs.com/dengch/p/17819375.html

相关文章

  • 牛客[编程题] HJ26 字符串排序
    HJ26 字符串排序  中等  通过率:39.52%  时间限制:1秒  空间限制:32M 描述编写一个程序,将输入字符串中的字符按如下规则排序。规则1:英文字母从A到Z排列,不区分大小写。如,输入:Type输出:epTy规则2:同一个英文字母的大小写同时存在时,按照输入......
  • 判断一个字符串是否为回文字符串
    #include<stdio.h>#include<stdbool.h>#include<string.h>boolis_palindrome(char*str){intlength=strlen(str);for(inti=0,j=length-1;i<j;i++,j--){if(str[i]!=str[j]){returnfalse;}}retu......
  • python json.loads()字符串转json
    python json.loads()字符串转jsonimportjsonimportrequestsres='''{"code":200,"message":"success","duration":147,"result":{"angle":0,"height":368,"tables":[],&qu......
  • java 字符串比较
    packagecom.elaina.test2;publicclassStringTest{publicstaticvoidmain(String[]args){//创建字符串Strings1=newString("abc");Strings2="abc";Strings3="Abc";//==号比......
  • java 创建字符串对象
    packagecom.elaina.test1;publicclassStringTest{publicstaticvoidmain(String[]args){//直接赋值Strings1="abc";System.out.println(s1);//使用new//空参构造,创建一个空白的字符串对象Strings2......
  • 2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制
    2023-11-08:用go语言,字符串哈希原理和实现比如p=233,也就是课上说的选择的质数进制"31256..."01234hash[0]=3*p的0次方hash[1]=3*p的1次方+1*p的0次方hash[2]=3*p的2次方+1*p的1次方+2*p的0次方hash[3]=3*p的3次方+1*p的2次方+2*p......
  • java(字符串的反转)
    需求:键盘录入一个字符串,利用代码将字符串反转。importjava.util.Scanner;publicclassBoke{publicstaticvoidmain(String[]args){ScannerSc=newScanner(System.in);System.out.print("请输入一个字符串:");Stringx=Sc.next();......
  • 《java解惑》——续字符串之谜
    1.字符串替换:问题:下面这段程序把类全路经名中的"."替换为"/",代码如下:1.packagecom.javapuzzlers;2.3.publicclassTest{4.5.publicstaticvoidmain(String[]args){6.class.getName().replaceAll(".","/")+".class&......
  • JS 字符串操作
    JS字符串操作小结:concat()–将两个或多个字符的文本组合起来,返回一个新的字符串。 indexOf()–返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回-1。 charAt()–返回指定位置的字符。 lastIndexOf()–返回字符串中一个子串最后一处出现的索引,如果没有匹......
  • 手机、email、数字、卡号、邮编、身份证、邮箱、微信号、中文字母等校验
    //正整数不能以0开头,可写范围即数字位数长度functionint_number(number,min=0,max=''){ conststr=newRegExp(`^[1-9]\\d{${min},${max}}$`)  return  regTel .test(number)}//有效数字,需要验证几位的小数,默认2位functionis_rightNum(number,dot......