判斷兩個字串是否為變形詞和旋轉詞

2021-10-07 20:50:34 字數 2657 閱讀 3484

【題目】

給定兩個字串 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 基本思路...