首页 > 其他分享 >290. 单词规律

290. 单词规律

时间:2023-11-17 14:11:06浏览次数:28  
标签:tmp map false 规律 index pattern 单词 290 string

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。


示例1:

输入: pattern = "abba", s = "dog cat cat dog"
输出: true

解法一 :用stringstream处理有空格的字符串


class Solution {
public:
    bool wordPattern(string pattern, string str) {
        unordered_map<char, string> map;
        unordered_map<string, char> rmap;
        stringstream ss(str); string s;
        for(char c : pattern) {
            if(!(ss >> s) || (map.count(c) == 1 && map[c] != s) || (rmap.count(s) == 1 && rmap[s] != c)) return false;
            map[c] = s; rmap[s] = c;
        }
        return (ss >> s) ? false : true;
    }
};

解法二


class Solution {
public:
    bool wordPattern(string pattern, string s) {
        unordered_map<char,string> mymap;
        unordered_map<string,char> mymap1;
        int index = 0;
        int l = 0;
        int r = 0;
        while(r < s.size()){
            while(r < s.size() && s[r] != ' '){
                r++;
            }
            string tmp = s.substr(l,r-l);
            if(mymap.find(pattern[index]) == mymap.end()){
                mymap[pattern[index]] = tmp;
            }else{
                if(mymap[pattern[index]] != tmp){
                    return false;
                }
            }
            if(mymap1.find(tmp) == mymap1.end()){
                mymap1[tmp] = pattern[index];
            }else{
                if(mymap1[tmp] != pattern[index]){
                    return false;
                }
            }
            index++;
            l = r;
            l++;
            r++;
        }
        return index < pattern.size() ? false:true;
    }
};

标签:tmp,map,false,规律,index,pattern,单词,290,string
From: https://www.cnblogs.com/lihaoxiang/p/17838634.html

相关文章

  • 151. 反转字符串中的单词
    2023-11-17思路:调用库函数+利用正则表达式利用栈双端队列头插链表利用数组总长度不知道按最大长度10^4利用list进阶:字符串可变时,Java不行,双指针,先整体反转,再逐个反转单词可以将空间复杂度降低 数组:classSolution{publicStringreverseWor......
  • 统计字符串中每个单词出现的次数
    defcount_words(string):words=string.split()word_count={}forwordinwords:ifwordinword_count:word_count[word]+=1else:word_count[word]=1returnword_countstring="Iloveprogramming.Programmingisfun!"......
  • 统计字符串中每个单词出现的次数
    defcount_words(string):words=string.split()word_count={}forwordinwords:ifwordinword_count:word_count[word]+=1else:word_count[word]=1returnword_countstring="Iloveprogramming.Programmingisfun!"......
  • 151. 反转字符串中的单词 1
    2023-11-11151.反转字符串中的单词-力扣(LeetCode)思路:         栈利用栈 很好想,很好写        这里是将字符部分存入list,再逆序取出,相当于栈了;可以直接利用栈,简单方便    还有其他思路解法-》2classSolution{publicStringreverseWo......
  • 牛客[编程题] HJ27 查找兄弟单词
    HJ27 查找兄弟单词  描述定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。兄弟单词要求和原来的单词不同。例如:ab和ba是兄弟单词。ab和ab则不是兄弟单词。现在给定你n个单词,另外再......
  • 最大单词长度乘积
    题目概述:给你一个字符串数组words,找出并返回length(words[i])*length(words[j])的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个单词,返回0。解题思路1:暴力做法+小优化。直接两重循环枚举所有组合,再写一个函数判断两个字符串是否含有相同字符。时间复杂度:\(......
  • 30. 串联所有单词的子串
    给定一个字符串s和一个字符串数组words。words中所有字符串长度相同。s中的串联子串是指一个包含words中所有字符串以任意顺序排列连接起来的子串。例如,如果words=["ab","cd","ef"],那么"abcdef","abefcd","cdabef","cdefab","efabcd",和......
  • 洛谷 P2290 [HNOI2004] 树的计数(Prufer序列,Cayley 公式)
    传送门解题思路关于Prufer序列的构造,见OI-wiki这里直接放结论:一个Prufer序列与一个无根树一一对应度数为\(d_i\)的节点在序列中出现了\(d_i-1\)次\(\sum(d_i-1)=n-2\)n个点的完全图的生成树有\(n^{n-2}\)种所以相当于n-2个数(有重复的)进行全排列,答案即为:\[\frac......
  • 实验三 计算机九班周天意202383290419
    一、实验目的1.能正确使用c语法规则定义、声明、调用函数2.能正确编写递归函数3.针对具体问题场景,能合理抽象出独立的功能模块,正确定义函数并使用,使得代码更具可读性、可维护性4.针对具体问题场景,能正确、合理使用全局变量和局部static变量,解决实际问题二、实验准备实验前......
  • 【算法题】2909. 元素和最小的山形三元组 II
    题目:给你一个下标从0开始的整数数组nums。如果下标三元组(i,j,k)满足下述全部条件,则认为它是一个山形三元组:i<j<knums[i]<nums[j]且nums[k]<nums[j]请你找出nums中元素和最小的山形三元组,并返回其元素和。如果不存在满足条件的三元组,返回-1。示例1:......