翻转字符串和比较两个字符串是否相同
2016-09-20 14:04
531 查看
奉献两个小题,练习继续:
//题目描述 // //请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 //给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 //测试样例: //"This is nowcoder" //返回:"redocwon si sihT" #include<iostream> #include<string> using namespace std; class Reverse { public: string reverseString(string iniString) { // write code here //string result; if(iniString.empty()) { return iniString; } //for (int i = iniString.size(); i >0; i--) //error: control reaches end of non-void function [-Werror,-Wreturn-type] //没有返回值啊 //{ // cout << iniString[i - 1]; //} //两个数字交换,可以借助第三变量,也可以不借助第三变量;有三种方法,自行总结 //iniString[i] ^= iniString[j] ^= iniString[i] ^= iniString[j];//交换 for (int i = 0; i < iniString.size()/2; i++) { char temp = iniString[i]; iniString[i] = iniString[iniString.size() - 1 - i]; iniString[iniString.size() - 1 - i] = temp; } return iniString; } }; //题目描述 // //给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。 //给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。 //测试样例: //"This is nowcoder", "is This nowcoder" //返回:true //"Here you are", "Are you here" //返回:false #include<iostream> using namespace std; #include<string> #include<map> //直接用的sort函数,虽然简洁,复杂度却是O(nlogn); //正规的做法,应该是hash,用256的元素记录每个字符出现的次数 //再进行比较,扫描一遍,比较一遍,复杂度只要O(n). class Same { public: bool checkSam(string stringA, string stringB) { // write code here map<char,int> maps; if (stringA.size()!=stringB.size()) { return false; } for (size_t i = 0; i < stringA.size(); i++) { maps[stringA[i]]++; } for (size_t i = 0; i < stringB.size(); i++) { maps[stringB[i]]--; } //if (maps.empty()) //为什么没有通过呢??? //{ // return true; //} //else //{ // return false; //} for (size_t i = 0; i < maps.size(); i++) //通过测试 { if (maps[i]!=0) { return false; } } return true; } }; ////想法不错,但是若是AA,BB此题也可通过 //bool checkSam(string stringA, string stringB) { // // write code here // int lenA = stringA.length(); // int lenB = stringB.length(); // if (lenA == lenB){ // int t = 0; // for (int i = 0; i<lenA; i++){ // t ^= stringA[i]; // t ^= stringB[i]; // } // if (t == 0){ // return true; // } // } // return false; //}
相关文章推荐
- 翻转字符串和比较两个字符串是否相同
- 翻转字符串和比较两个字符串是否相同
- 翻转字符串和比较两个字符串是否相同
- 比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- 用汇编语言写一个程序,比较两个字符串是否相同。
- asp.net下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- 汇编语言: 试编写一段程序,要求比较两个字符串 string1 和 string2 所含字符是否相等,如相 等则显示“MATCH”, 若不相同则显示“NO MATCH”。
- C#中使用Equals()函数比较两个字符串是否相同
- 比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- php比较两个字符串是否相同
- 两个字符串比较是否相同
- matlab之比较两个字符串前几位是否相同
- C#下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)
- 使用python语言,比较两个字符串是否相同的实例
- 比较两个字符串的连接模式是否相同
- php比较两个字符串是否相同
- leetcode_318. Maximum Product of Word Lengths 求两个不相交的字符串的长度乘积的最大值,将字母转换成二进制形式,按位与比较是否有相同字母
- 6-2-1 字符串-字符串变量String-创建字符串变量-初始化字符串变量-字符串连接-输入字符串(单词、行)-对象变量的赋值-比较两个字符串是否同一个-比较两个字符串内容是否相同
- Python 2.X 下,比较两个字符串是否相同