单词相关问题总结

0X00 单词比较问题总结

比较两个单词所用字符是否相同

a = "aaabbbcccddd"
b = "abcdabcdabcd"

def comapre(a, b):
    if len(a) != len(b):
        return False
    r1, r2 = [0] * 256, [0] * 256
    for c in a:
        r1[ord(c)] += 1
    for c in b:
        r2[ord(c)] += 1

    for i in range(256):
        if r1[i] != r2[i]: return False

    return True
print(comapre(a, b))

0X01 单词搜索问题总结

前缀搜索

720. 词典中最长的单词

class Solution:
    def longestWord(self, words: List[str]) -> str:
        trie = {}
        for word in words:
            p = trie
            for idx, c in enumerate(word):
                p = p.setdefault(c, {})
            p['#'] = word
        
        # dfs 搜索
        self.depth = 0
        self.ans = ""
        def dfs(node, depth):
            if '#' in node:
                if depth > self.depth:
                    self.ans = node['#']
                    self.depth = depth
                elif depth == self.depth:
                    self.ans = min(self.ans, node['#'])
                if len(node) == 1: return

            for k, v in node.items():
                if k != "#" and '#' in v:  dfs(v, depth+1)
            
        # print(trie)
        dfs(trie, 1)

        return self.ans

这个 trie 容易写错....

相关题目有:

网格搜索(dfs)

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        if len(board) == 0: return False
        m, n = len(board), len(board[0])
        dirs = [(0, 1), (0, -1), (1, 0), (-1, 0)]
        def dfs(x, y, visited, idx):
            if idx >= len(word): return True
            if x < 0 or y < 0 or x >= m or y >= n: return False
            if word[idx] != board[x][y]: return False
            for dx, dy in dirs:
                x1, y1 = x + dx, y+dy
                if (x1, y1) in visited: continue
                if dfs(x1, y1, visited|{(x1, y1)}, idx+1):
                    return True
            
            return False

        for x in range(m):
            for y in range(n):
                if dfs(x, y, {(x, y)}, 0): return True
        
        return False

单个字母差异搜索(bfs)

from collections import deque
import string

class Solution:
    def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:
        # bfs
        # 不可重复计算
        visited = set(wordList)
        if endWord not in visited: return 0
        if beginWord in visited: visited.remove(beginWord)
        deq = deque([beginWord])
        m = len(beginWord)
        # 注意 step 的最后值
        step = 1
        while len(deq) > 0:
            size = len(deq)
            # print(deq)
            while size > 0:
                size -= 1
                word = deq.popleft()
                # 构造新单词
                for i in range(m):
                    newWords = [word[:i] + c + word[i+1:] for c in string.ascii_lowercase]
                    # print(newWords)
                    for w in newWords:
                        if w not in visited: continue
                        if w == endWord: return step + 1
                        visited.remove(w)
                        deq.append(w)
            step += 1
        
        return 0

        

0X02 单词翻转

单词原地翻转

b = "123456789"
s = list(b)

def reverse(s):
    left, right = 0, len(s)-1

    while left < right:
        s[left], s[right] = s[right], s[left]
        left += 1
        right -= 1


reverse(s)

print("".join(s))

句子中的单词翻转

先翻转整个字符串, 然后按照分割符翻转单词

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 目录 前言:算法总结,每天努力学习,努力总结.最近的博客质量很差,主要的原因是自己大部分的时间花在刷题上面了,抱歉...
    madao756阅读 777评论 0 4
  • BWA Burrows-Wheeler Aligner作为一个十分出名的alignment软件,在各个生信领域的比...
    栽生物坑里的信息汪阅读 4,613评论 0 5
  • 夏天一到,修空调的就好忙。 我家空调也坏了,修一修就好了吗?No,年份久的空调,维修费不便宜,还常常坏,这样下来,...
    雪中凝阅读 264评论 3 1
  • C++ C++特性 C++11 多态和继承 构造函数 析构函数 手写代码实现string类 手写代码实现智能指针 ...
    FieldRen阅读 360评论 0 0