《Cracking the Coding Interview程式設計師面試金典》----確定兩串亂序同構

塵封的記憶0發表於2017-04-19
時間限制:3秒 空間限制:32768K 熱度指數:5715
本題知識點: 字串
 演算法知識視訊講解

題目描述

給定兩個字串,請編寫程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。這裡規定大小寫為不同字元,且考慮字串重點空格。

給定一個string stringA和一個string stringB,請返回一個bool,代表兩串是否重新排列後可相同。保證兩串的長度都小於等於5000。

測試樣例:
"This is nowcoder","is This nowcoder"
返回:true
"Here you are","Are you here"

返回:false


解題思路:有點無恥額,直接用的sort函式,雖然簡潔,複雜度卻是O(nlogn);正規的做法,應該是hash,用256的元素記錄每個字元出現的次數;再進行比較,掃描一遍,比較一遍,複雜度只要O(n).

#include<iostream>
#include<iomanip>
#include<cmath>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool checkSam(string stringA, string stringB) {
	// write code here
	sort(stringA.begin(), stringA.end());
	sort(stringB.begin(), stringB.end());
	return stringA.compare(stringB) == 0;
}
int main()
{
	double s;
	int i, j;
	string n, m;
	while (getline(cin, n))
	{
		getline(cin, m);
		if (checkSam(n, m) == 1)
			cout << "Ture" << endl;
		if (checkSam(n, m) == 0)
			cout << "False" << endl;
	}

	return 0;
}

不懂的可以加我的QQ群:261035036(IT程式設計師面試寶典

群) 歡迎你到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章