首页 > 其他分享 >new

new

时间:2024-08-21 23:50:24浏览次数:8  
标签:单词 hash 变位 char 哈希 table new

1.变位词

所谓"变位词"是指两个词之间存在组成字母的重新排列关系

如:heart和earth,python和typhon

为了简单起见,假设参与判断的两个词仅由小写字母构成,而且长度相等

思路1:建一个哈希表,将第一个单词中的字母存入到哈希表中。第二个单词的字母与哈希表对比,有一个相同的就从哈希表中取出一个,最后若哈希表为空则俩个单词相同。

def is_anagram(word1, word2):
  # 检查两个单词是否相等
  if len(word1) != len(word2):
    return False
    # 使用哈希表(字典)来存储第一个单词中每个字母出现的次数
  hash_table = {}
  for char in word1:
    if char in hash_table:
      hash_table[char] += 1
    else:
      hash_table[char] = 1
      # 遍历第二个单词,每遇到一个字母就在哈希表中减1
  for char in word2:
    if char in hash_table:
      hash_table[char] -= 1
      if hash_table[char] == 0:
        del hash_table[char]
    else:
      return False
      # 如果哈希表为空,则两个单词是变位词
  return len(hash_table) == 0

# 测试函数
print(is_anagram("heart", "earth"))  # 应该输出 True
print(is_anagram("word","droe")) #应该输出False

解法2:排序比较

将两个字符串都按照字母顺序排好序

再逐个字符对比是否相同,如果相同则是变位词,有任何不同就不是变位词

def anagrmSolution2(s1,s2):
  #转为列表
  alist1=list(s1)
  alist2=list(s2)
  #分别排序	
  alist1.sort()
  alist2.sort()
  pos=0
  matches=True
  while pos<len(s1) and matches:
    if alist1[pos] == alist2[pos]: #逐个对比
      pos=pos+1
    else:
      matches=False
  return matches
print(anagrmSolution2('cyf','cyx'))

标签:单词,hash,变位,char,哈希,table,new
From: https://www.cnblogs.com/CyfS1mple/p/18372749

相关文章

  • C++——new对象
    new对象与之前C的"类对象"方式有所不同,"类对象"方式并不会调用构造函数和析构函数,而new对象则会调用两个函数,释放该空间时用delete。数组申请int类型的数组#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;intmain(){ int*a=newint[10];......
  • P4271 [USACO18FEB] New Barns P 题解
    题目传送门前置知识树的直径|最近公共祖先|并查集解法一个显而易见的结论:设点集\(A\)的直径的两个端点为\(u_{1},v_{1}\),另一个点集\(B\)的直径的两个端点为\(u_{2},v_{2}\),则\(A\bigcupB\)的直径端点一定是\(\{u_{1},v_{1},u_{2},v_{2}\}\)中的两个。还有......
  • addEventHandler(MouseEvent.MOUSE_PRESSED, new Event
    canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED,newEventHandler(){@Overridepublicvoidhandle(MouseEvente){doubledifX=e.getSceneX()-baseDrageX;doubledifY=e.getSceneY()-baseDrageY;baseDrageX=e.getSceneX();baseDrageY=e.getSceneY();......
  • new和malloc
    "new"和"malloc"都是在C++和C语言中用于动态分配内存空间的关键字/函数。"new"关键字:在C++中,"new"关键字用于在堆上动态分配内存空间。它可以像以下方式使用:int*ptr=newint;//动态分配一个int类型的空间"new"关键字会自动计算所需的内存大小,并返回一个指向分配内存......
  • postgres.new:在浏览器中构建与AI协作的开源Postgres沙盒
      每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https://......
  • NewsBreak助力美国护肤品品牌电商广告推广优势
    在数字化浪潮席卷全球的今天,广告推广已不仅仅是企业营销的单一手段,更是塑造品牌形象、扩大市场份额、提升用户粘性的重要途径。特别是在美国这个全球最大的经济体之一,电商行业的蓬勃发展更是为各类品牌带来了前所未有的机遇与挑战。NewsBreak,作为美国一款备受欢迎的新闻资讯平......
  • C/C++ 动态分配:malloc()和free()所涉及的空指针和强制类型转换、与new和delete的对比
    1、动态分配的内涵所谓动态内存分配,是指在程序运行时根据需要分配和释放内存,而不是在编译时确定内存需求。动态分配包括两方面的内涵:在堆上分配内存。对于linux的虚拟内存,可以分成以下5段:文本段、数据段(分初始化和未初始化数据段)、堆和栈。不使用动态分配定义一个变量,这个变......
  • var reg = new RegExp(“(^|&)“ + name + “=([^&]*)(&|$)“, “i“)匹配
    vargetQuery=function(name){ varreg=newRegExp("(^|&)"+name+"=([^&]*)(&|$)","i"); varr=window.location.search.substr(1).match(reg); if(r!=null) return(r[2]); returnnull; };}去网上查了一些资料......
  • c语言替换字符串 Replace the first ‘oldstr‘ with ‘newstr‘ in ‘srcstr‘
    #include<string.h>#include<stdlib.h>#include<stdio.h>#include<time.h>#include<ctype.h>#include<sys/stat.h>voidgetdate(char*datestr,char*format){ time_tnnowtime=time(NULL); structtm*ptmTemp=loc......
  • To create a new mock, the existing static mock registration must be deregistered
    1、异常提示:Tocreateanewmock,theexistingstaticmockregistrationmustbederegistered  2、原因分析由提示信息可知,静态模拟已经注册过了,再次注册时必须先将之前的撤销。所以我们要撤销之前的注册信息,再执行。这里提供另一种方法,将模拟静态的方法......