【題目】
給定兩個字串 str1 和 str2,如果 str1 和 str2 **現的字元種類一樣且每種字元出現的次
數也一樣,那麼 str1 與 str2 互為變形詞。請實現函式判斷兩個字串是否互為變形詞。
【舉例】
str1=「123」,str2=「231」,返回 true。
str1=「123」,str2=「2331」,返回 false。
【解答】
如果str1和str2的長度不同則直接返回false。
如果str1和str2的長度相同,假設出現字元的編碼值在0~255之間,那麼申請乙個長度為256的整形陣列map,map[a] = b 代表位元組編碼為a的字元出現了b次,初始值map[0] ~ map[255]都是0。然後遍歷str1,統計每個字元出現的次數,比如字元 『a』 出現,其編碼值為97,則map[97]++,此時map就成了str1的字元詞頻統計表。然後遍歷str2,同級每個字元出現的次數,比如字元 『a』 出現,其編碼值為97,則map[97]–,如果減少之後小於0,則直接返回false。如果遍歷完str2,map中沒出現負值,則返回true。
【**】
public
boolean
isdeformation
(string str1,string str2)
char
chars1 = str1.
tochararray()
;char
chars2 = str2.
tochararray()
;int
map =
newint
[256];
for(
int i =
0; i < chars1.length; i++
)for
(int i =
0; i < chars2.length; i++)}
return
true
;}
【題目】
如果乙個字串為 str,把字串 str 前面任意的部分挪到後面形成的字串叫作 str 的旋轉
詞。比如 str=「12345」,str 的旋轉詞有"12345"、「23451」、「34512」、「45123"和"51234」。給定兩
個字串 a 和 b,請判斷 a 和 b 是否互為旋轉詞。
【舉例】
a=「cdab」,b=「abcd」,返回 true。
a=「1ab2」,b=「ab12」,返回 false。
a=「2ab1」,b=「ab12」,返回 true。
【要求】
如果 a 和 b 長度不一樣,那麼 a 和 b 必然不互為旋轉詞,可以直接返回 false。當 a 和 b 長
度一樣,都為 n 時,要求解法的時間複雜度為 o(n)。
【解答】
如果 a 和 b 長度不一樣,那麼 a 和 b 必然不互為旋轉詞,可以直接返回 false。如果長度相同,先生成乙個大字串string b2=b+b;判斷b2中是否包含a,則a和b互為旋轉詞,否則說明兩個字串不互為旋轉詞。
【**】
public
boolean
isrotation
(string str1,string str2)
string string = str2 + str2;
return string.
contains
(str1)
;//contains和indexof的時間複雜度都是o(n*m),
//如果想要o(n)的時間複雜度,需要用kmp演算法實現
return
getindexof
(string,str1)!=-
1;}
kmp演算法實現(抄的)
public
intgetindexof
(string s, string m)
char
ss = s.
tochararray()
;char
ms = m.
tochararray()
;int si =0;
int mi =0;
int[
] next =
getnextarray
(ms)
;while
(si < ss.length && mi < ms.length)
else
if(next[mi]==-
1)else
}return mi == ms.length ? si - mi :-1
;}public
int[
]getnextarray
(char
ms);}
int[
] next =
newint
[ms.length]
; next[0]
=-1;
next[1]
=0;int pos =2;
int cn =0;
while
(pos < next.length)
else
if(cn >0)
else
}return next;
}
判斷兩個字串是否為變形詞
例如 str1 123 str2 132 true str1 123 str2 1332 false 思路 1.如果其中乙個字串為空或者兩個字串長度不相等,返回 false 2.遍歷 str1,記錄每個字元出現的次數 1.建立乙個新的陣列 arr 初始化都為 0 2.遍歷 str1,利用字元的 as...
判斷兩個字串是否為變形詞
判斷兩個字串是否為變形詞 給定兩個字串str1和str2,如果str1和str2 現的字元種類出現的一樣且每種字元出現的次數也一樣,那麼str1和str2互為變形詞。請判斷str1和str2是否為變形詞。輸入描述 輸入包括3行,第一行包含兩個整數n,m 1 n,m 105 1 leq n,m leq...
字串 判斷兩個字串是否為變形詞
問題 給定兩個字串str1和str2,如果str1和str2中出現的字元種類一樣並且每種字元出現的次數也一樣,那麼str1與str2互為變形詞。請實現函式判斷兩個字串是否互為變形詞。舉例 str1 123 str2 231 返回true str1 123 str2 2331 返回false 基本思路...