每天堅持Crack Code(Day 2)

Chapter 1 | Arrays and Strings

問題

1.4 Write a method to decide if two strings are anagrams or not.

翻譯:寫一個方法判斷兩個字符串是否是anagrams。所謂Anagrams指的是具有如下特性的兩個單詞:在這兩個單詞當中,每一個英文字母(不區分大小寫)所出現的次數都是相同的,只是位置不同,例如:“Unclear”和“Nuclear”、“Rimon”和“MinOR”

方法一:字典排序之後比較這兩個詞的字符是否一樣。時間複雜度:排序(O(nlogn))+比較(O(n)

//方法一:字典排序之後比較這兩個詞的字符是否一樣。時間複雜度:排序(O(nlogn))+比較(O(n)
bool anagrams1(string s, string t)
{
	if(s==""|| t=="") return false;
	if(s.length() != t.length()) return false;
	sort(&s[0],&s[0]+s.length());//字典排序
	sort(&t[0],&t[0]+t.length());//字典排序
	if (s == t)return true;
	else 
		return false;

}

/*
方法二:Check if the two strings have identical counts for each unique char.
由anagrams的定義知道其字符應該完全一樣,因此可以統計出各個字符出現的次數是否
一樣,我們用一個額外的256大小的數組來存儲字符出現的次數,若第一個單詞中的每個
字符出現就相應+1,若第二個單詞中的對應的字符出現則相應-1,最後如果數組的和爲
0則表示這兩個單詞是anagrams。
*/
bool anagrams2(string s, string t)
{
	if(s==""|| t=="") return false;
	if(s.length() != t.length()) return false;
	int len = s.length();
	int letters[256];
	memset(letters,0,sizeof(letters));
	for(int i=0;i
方法二:Check if the two strings have identical counts for each unique char.由anagrams的定義知道其字符應該完全一樣,因此可以統計出各個字符出現的次數是否一樣,我們用一個額外的256大小的數組來存儲字符出現的次數,若第一個單詞中的每個字符出現就相應+1,若第二個單詞中的對應的字符出現則相應-1,最後如果數組的和爲0則表示這兩個單詞是anagrams。

1.5 Write a method to replace all spaces in a string with ‘%20’.

翻譯:寫一個方法將一個字符串中的空格替換成‘%20’。這個題目中,由於是原來一個空格字符要替換成‘%20’三個字符串,因此字符串本身會變長,如果可以另外建一個字符串,我們就可以分配足夠大的內存空間;但是如果要求中不能另外開闢新的空間,那就只能在原來的字符串基礎上做替換,並且保證字符串後面有足夠多的空域內存。

時間複雜度爲O(n)的方法。算法基本步驟:

1. 計算字符串中的空格數,從而計算出替換後字符串新的長度。

2.從後往前查找,若是空格則替換成'%20',否則複製原來的字符到新的位置。

/*
這個題目中,由於是原來一個空格字符要替換成‘%20’三個字符串,因此字符串本身會變長,
如果可以另外建一個字符串,我們就可以分配足夠大的內存空間;但是如果要求中不能另外
開闢新的空間,那就只能在原來的字符串基礎上做替換,並且保證字符串後面有足夠多的空
域內存。時間複雜度爲O(n)的方法。算法基本步驟:
1. 計算字符串中的空格數,從而計算出替換後字符串新的長度。
2.從後往前查找,若是空格則替換成'%20',否則複製原來的字符到新的位置。
*/
void Replacefunc1(char *str)
{
	if(str == NULL)return;
	int len = strlen(str);
	if(len == 0)return;
	int spaceCount = 0;
	int newLength =0;
	for (int i=0;i=0;--i)
	{
		if(str[i]==' ')
		{
			str[newLength-1]='0';
			str[newLength-2]='2';
			str[newLength-3]='%';
			newLength=newLength-3;
		}
		else
		{
			str[newLength-1]=str[i];
			newLength=newLength-1;
		}
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章