首页 > 其他分享 >同构字符串(vector数组实现)

同构字符串(vector数组实现)

时间:2025-01-11 22:05:17浏览次数:3  
标签:字符 同构 映射 ss tt 样例 vector 字符串 size

【问题描述】

给定两个字符串 s 和 t ,判断它们是否是同构的。如果是同构的,输出true,否则,输出false。

注:如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上相同字符只能映射到同一个字符上,字符可以映射到自己本身。

【输入形式】

输入由两行组成,第一行为字符串s,第二行为字符串t
【输出形式】

输出包含一行,值为true或者false

【样例输入1】

egg
add
【样例输出1】

true
【样例说明1】

字符串s中的'e'映射成'a','g'映射成'd',可以转化成字符串t。

【样例输入2】

foo
bar
【样例输出2】

false
【样例说明2】

字符串s中的'o'映射成'a'和'r',不符合条件。

【样例输入3】

paper
title
【样例输出3】

true
【评分标准】

思路:1.长度不一样肯定不行

           2.查看过的记录一下,遇到相同的对比记录之前查看的上下字符是否一致(这样可以排除一对多或者多对一的问题)

#include<iostream>
#include<vector>
#include<string>
using namespace std;

bool compare(char s, vector<char>& x) {
    for (size_t i = 0; i < x.size(); i++) {
        if (s == x[i]) {
            return false;
        }
    }
    return true;
}

int main() {
    string s, t;
    cin >> s;
    cin >> t;
    vector<char> ss;
    vector<char> tt;
    vector<char> x;
    vector<char> x2;
    // 将 s 和 t 中的字符存储到相应向量中
    for (char c : s) ss.push_back(c);
    for (char c : t) tt.push_back(c);

    // 首先检查长度是否相等
    if (ss.size()!= tt.size()) {
        cout << "false";
        return 0;
    }

    for (size_t i = 0; i < ss.size(); i++) {
        // 检查当前字符是否已经处理过
        if (compare(ss[i], x)) {
            x.push_back(ss[i]);
            if(compare(tt[i],x2)){// 检查当前字符是否已经处理过
            x2.push_back(tt[i]);
            char target = tt[i];
            for (size_t j = i + 1; j < ss.size(); j++) {
                // 检查后续相同字符的映射是否正确
                if (ss[j] == ss[i]) {
                    if (tt[j]!= target) {
                        cout << "false";
                        return 0;
                    }
                }
            }
        }
        else{
            cout << "false";
            return 0;
        }
        }
        
    }
    cout << "true";
    return 0;
}

标签:字符,同构,映射,ss,tt,样例,vector,字符串,size
From: https://blog.csdn.net/2401_88485715/article/details/145030095

相关文章

  • 字符串是否为标题
    Python挑战练习-进阶挑战37编写一个程序来判断一个句子是否为标题文本。定义函数is_title(),参数为一个句子。在函数内,如果句子中的每个单词都以大写字母开头,则返回True,否则返回False。思路:①要判断每个单词,首先想到要把输入的句子用split进行分割 ②判断分割后每个单......
  • 字符串解码(递归)
    题目链接:https://leetcode.cn/problems/decode-string/题意:嵌套递归classSolution{public:intwhere;stringrepeat(stringpath,intcnt){stringans="";for(inti=1;i<=cnt;i++){ans+=path;......
  • C语言实现字符串替换函数
    #include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>//字符串替换函数/*********************************************************************Function:my_strstr()*Description:在一个字符串中查找一个子串;*Input:p......
  • 总结并拆解所有新手常用的——String API(二)(字符串)
    前言:String类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写.......小编这次就比较全面系统的带大家总结清楚几乎所有string常用的API,并且带大家拆解清楚,能够灵活使用!!!小编最近熬夜牙疼的......
  • JavaScript字符串拓展:实用方法与示例全解析
    一、引言:为什么要学习JS字符串拓展在前端开发的世界里,JavaScript如同基石般支撑着网页的交互与动态呈现。而字符串作为我们日常操作中最频繁接触的数据类型之一,其原生方法在面对复杂多变的业务需求时,有时难免显得捉襟见肘。此时,JS字符串拓展方法就如同一个个得力助手,闪亮......
  • JS-27 字符串方法_split()
    split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组'it|sxt|zifuchuan'.split('|')//["it","sxt","zifuchuan"]如果分割规则为空字符串,则返回数组的成员是原字符串的每一个字符。'a|b|c'.split('')//["a","|","b&q......
  • JS-26 字符串方法_trim()
    trim方法用于去除字符串两端的空格,返回一个新的字符串,不改变源字符串'zifuchuan'.trim()//"helloworld" 该方法去除的不仅仅是空格,还包括制表符(\t、\v)、换行符(\n)和回车符(\r)'\r\zifuchuan\t'.trim()//'zifuchuan' ES6扩展方法,trimEnd和trimStart()方法" zifuchua......
  • SQLSER中使用DATALENGTH 函数返回字符串的字节长度
    DATALENGTH函数返回字符串的字节长度,这对于varchar类型的字段非常有用,因为varchar类型的字段存储的是变长字符串,其实际占用的字节数可能小于定义的最大长度。示例假设有一个表Articles,其中有一个varchar类型的字段Content,你想查询每篇文章内容的实际占用字节数,可以使用......
  • JS-25 字符串方法_indexOF()
    indexOf方法用于确定一个字符串再另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配'helloworld'.indexOf('o')//4'helloworld'.indexOf('a')//4-1'床前明月光,疑是地上霜。一去二三里,举头望明月,低头思故乡。'.indexOf("一去二三里")//12 i......
  • 向量空间 Vector Spaces
    向量空间VectorSpaces​ 在GilbertStrang教授的书中,提到了导数的转置(TheTransposeofaDerivative)。在正式的向量空间内容之前,可以先了解一下导数与矩阵转置的联系。​ 考虑将矩阵看做一个运算符(或者说,算子),对于函数\(x(t)\)的线性代数。假设\(\symbfit{A}=\mathrm{d}/\mat......