問題:乙個字串可以由另乙個字串移位得到,例如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,...