python字母移位 演算法 字串移位

2021-10-11 07:26:19 字數 1778 閱讀 7627

問題:乙個字串可以由另乙個字串移位得到,例如abcd,可以由bcad移位得到。

問題分析

這個問題表面上說的是字串,但是其實更進一步可以理解為兩個字元陣列的元素是否一致。最簡單和直白的方式,無異於用兩層迴圈的方式來進行迴圈判斷。這是常規方案一。

還有方案二,則是需要用到資料結構,例如,將乙個字串轉換成乙個set。迴圈另乙個陣列,往set中插入資料,如果一直是失敗的,則true。有一次插入成功了,則false。

方案如果我們在轉換一下思想,字元其實在計算機中的表現,它的實質上也是數字,比如ascii碼中,字元a是可以轉換成數字97的,所以兩個陣列其實只要求元素之間的差的和,如果等於0就可以判斷是否相等。

例如:1,2,34 和 2,3,14

則:1-2=-1

2-3=-1

3-1=2

4-4=0

差的和:

-1+-1+2+0=0

但是,這樣只是判斷了移位,並沒有判斷基準位置。比如,13和22是可以判斷成立的,因此需要增加判斷兩個陣列的乘積是否相等。來判斷基準位置是否一致。

python 實現

def test(old,new):

if len(old) <= 0 or len(new) <= 0 or len(old) != len(new):

return false;

oldarr = map(ord, old)

newarr = map(ord, new)

total = 0

newpro = 1

oldpro = 1

for i in xrange(0,len(oldarr)):

total += newarr[i] - oldarr[i]

newpro = newt * newarr[i]

oldpro = oldt * oldarr[i]

if total == 0 and newpro == oldpro:

return true

else :

return false

if __name__ == '__main__':

print test('13', '22')

c 語言核心實現

#include

int test(char,int,char,int);

int main();

char new=;

int result = test(old,4,new,4);

printf("%d\n",result);

return 0;

int test(char old,int oldlen,char new, int newlen) {

if(oldlen <= 0 || newlen <= 0 || oldlen != newlen){

return 0;

int total = 0;

int newpro = 1;

int oldpro = 1;

for(int i=0; i

total += (int)old[i] - (int)new[i];

newpro = newpro * new[i];

oldpro = oldpro * old[i];

if(total == 0 && newpro == oldpro){

return 1;

return 0;

侷限我所寫實現依賴於ascii碼,當如果字串是unioncode編碼的字元,則就會出現問題。容我有空去研究一下,相處通用得解決方案。如有問題歡迎各位批評指正,不勝感激。

python字母移位 Python字母移位

def menu choice input press 1 to encode,2 to decode,9 to exit return choice def makekeycode message key input what is the key?upper length len message...

字串迴圈移位演算法

打算好好學演算法,從模仿開始,我現在寫的演算法都是看了別人的原理然後自己實現的。積累實在太少,很多問題想不到最優的解決方案,不過以後會好起來的。字串的迴圈移位 左移和右移原理一樣 原理 如字串1234abcd,右移4位,實現如下 1234abcd 4321abcd 4321dcba abcd234 ...

字串移位

把乙個字串左選擇操作 吧字串前面的的若干字元移動到字串的尾部,如吧字串的abcdef左旋轉2位得到字串cdefab。思路1.暴力移位發 把移動m部拆分成移動一步。void leftshiftone char s,int n s n 1 t 移動m位,如下 void leftshift char s,...