首页 > 其他分享 >字符串置换

字符串置换

时间:2024-04-27 12:34:08浏览次数:20  
标签:return string int 置换 ++ 字符串 false size

3.1 LintCode211-字符串置换

 

 

bool Permutation(string &A, string &B){   

解法一:单纯使用数组计数,缺点是对如果带有特殊符号的字符串是无法处理的

时间复杂度是O(n)

#include <iostream>

using namespace std;

const int N = 1e5 + 10;

int cnt1[26];

int cnt2[26];

bool Permutation(string &A, string &B) {

if (A.size() != B.size())

return false;

else {

for (int i = 0; i < A.size(); i++) {

cnt1[A[i] - 'a']++;

cnt2[B[i] - 'a']++;

}

}

for (int i = 0; i < 26; i++) {

if (cnt1[i] != cnt2[i])

return false;

}

return true;

}

int main() {

string a, b;

cin >> a >> b;

if (Permutation(a, b))

cout << "true";

else

cout << "false";

return 0;

}

解法二:使用排序 使用快速排序时间复杂度是O(nlogn)(这个是快排的时间复杂度)+O(n)(遍历的时间复杂度)=======O(nlogn) 对于第一种解法来说效率是更低的

#include <iostream>

#include <algorithm>

using namespace std;

const int N = 1e5 + 10;

int cnt1[26];

int cnt2[26];

bool Permutation(string &A, string &B) {

   if (A.size() != B.size())

      return false;

   else {

      sort(A.begin(), A.end());

      sort(B.begin(), B.end());

      if (A == B)

          return true;

      else

          return false;

   }

}

int main() {

   string a, b;

   cin >> a >> b;

   if (Permutation(a, b))

      cout << "true";

   else

      cout << "false";

   return 0;

}

解法三:使用hash数据结构(解决了时间的问题,也解决了字符串范围的问题,无论字符串其中是什么特殊字符都可解决) 时间复杂度为O(n)对于长度越长的字符串来说效率是越高的。

#include <iostream>

#include <unordered_map>

using namespace std

const int N = 1e5 + 10;

typedef  unordered_map<char, int> mp;

mp map1;

mp map2;

//对于map的比较

bool cmp_map(mp map1, mp map2) {

   if (map1.size() != map2.size())

      return false;

 

   auto it1 = map1.begin();

   auto it2 = map2.begin();

   for (; it1 != map1.end(); ++it1, ++it2) {

      if (it1->first != it2->first || it1->second != it2->second)

          return false;

   }

   return true;

}//这里是对于hash遍历的操作

bool Permutation(string &A, string &B) {

   if (A.size() != B.size())

      return false;

   else

      for (int i = 0; i < A.size(); i++) {

          map1[A[i]]++;

          map2[B[i]]++;

      }

   return cmp_map(map1, map2);

}

int main() {

   string a, b;

   cin >> a >> b;

   if (Permutation(a, b))

      cout << "true";

   else

      cout << "false";

   return 0;

}

标签:return,string,int,置换,++,字符串,false,size
From: https://www.cnblogs.com/FJCLJ/p/18161922

相关文章

  • 陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密
    陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密  这种专利权人是公司,个人是发明人,专利年费是申请人先垫付,然后公司报销了,这个专利本身就不属于员工的这个是公司是专利权人, 使用权是公司,如果想要维持权利的话,需要缴纳年费,专利发明现在一个市......
  • 顺序栈十进制转十六进制,还有键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串
    设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。*@brief :十进制转十六进制*@param :@Segstackt*Manager:地址* @unsignedintData:转换的值*@re......
  • 一道关于顺序栈的笔试题:判断一个包含'('和')'的字符串是否有效
    若有一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的左括号。思路图:参考代码:boolSeq......
  • 字符串里找数字
    #include<iostream>#include<string>#include<cctype>intmain(){std::stringinput;std::cout<<"请输入一个字符串:";std::getline(std::cin,input);//读取一行输入std::stringnumber;//用来存储找到的数字std::cou......
  • 如何在 C# 中使用 String.Split 分隔字符串
    一直以为split是用来分隔字符的,没想到还可以分隔数组。让程序变得更简单。微软官网的介绍在此记录下。https://learn.microsoft.com/zh-cn/dotnet/csharp/how-to/parse-strings-using-split 1、分单个字符stringphrase="Thequickbrownfoxjumpsoverthelazydog.";......
  • Android保存字符串到本地储存卡中saveLocal
    publicclassSaveLocal{//保存文件到sd卡publicstaticvoidsaveToFile(Stringcontent){BufferedWriterout=null;//获取SD卡状态Stringstate=Environment.getExternalStorageState();//判断SD卡是否就绪if(......
  • 找到字符串中所有字母异位词
    Problem:438.找到字符串中所有字母异位词目录思路Code给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。示例1:输入:s="cbaebabacd",p="abc"输出:......
  • 利用顺序栈判断字符串是否有效
    数据结构顺序表笔试题:通过键盘输入一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的......
  • Python 字符串格式化指南
    前言在Python中,字符串格式化是一种常见且重要的操作,用于将变量或值插入到字符串中,并控制输出的格式。本文将介绍几种常见的字符串格式化方法,帮助大家掌握在Python中有效地处理字符串的技巧。方法一:使用%操作符格式化字符串使用%操作符是一种传统的字符串格式化方法,可......
  • Unity性能优化——字符串和文本
    字符串和文本字符串和文本的处理不当是Unity项目中性能问题的常见原因。在C#中,所有字符串均不可变。对字符串的任何操作均会导致分配一个完整的新字符串。这种操作的代价相对比较高,而且在大型字符串上、大型数据集上或紧凑循环中执行时,接连不断的重复的字符串可能发展成性能......