1 1字串的旋轉

2022-08-09 00:03:18 字數 2242 閱讀 6692

題目:給定乙個字串,要求將字串的前面若干個字元移到字串的尾部。如有字串「abcdef」,將前3個字元移到字串尾部變成「defabc」。寫乙個函式實現此功能。

解法1:蠻力移位

比如將'a'移動到最後一位,就將'a'賦值給乙個臨時變數,然後把後面n-1個字元均向前移動一位(注意移動的時候由前向後依次進行,否則會將有用的值覆蓋掉),最後將臨時變數中的字元賦值給最後一位。若要移動m位字元,就重複呼叫這個函式m次;對於長度為n的字串,,假設需要移動m個字元到尾部,總共需要m*n次移動,因此時間複雜度為o(mn),

空間複雜度為o(1)。

public

class

reversrstring1

char t = sa[0];

for(int i = 1;i)

sa[len-1] =t;

}public

static

void leftrotatestring(string str, int

m)

int n =str.length();

char sa =str.tochararray();

while(m-->0)

system.out.print(sa);

}public

static

void

main(string args)

}

view code

解法2:三次反轉

思路:先將乙個字串分割成兩個部分,然後把這兩個部分的字串分別反轉,最後再對整個字串進行整體反轉,即可解決問題。

舉個栗子:輸入:字串"abcdef」,移動3位

輸出:字串"defabc」

1、將原字串劃分為兩個部分,x = "abc",y = "def"

2、反轉x得到"cba",反轉y得到"fed"

3、最後將"cbafed"整體反轉,得到"defabc"

這種把字串先分為兩個部分,各自反轉,再整體反轉的方法稱為「三步反轉」法,其時間複雜度為o(n),空間複雜度為o(1)

public

class

reversestring2

}public

static

void leftrotatestring(string str,int

m)

int n =str.length();

if (m>n)

char sa =str.tochararray();

reversestring(sa,0,m-1);

reversestring(sa,m,n-1);

reversestring(sa,0,n-1);

system.out.println(sa);

}public

static

void

main(string args)

}

view code

舉一反三:

單詞翻**輸入乙個英文句子,反轉句子中單詞的順序。要求單詞內字元的順序不變,句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如,若輸入"i am a student.",則輸出"student. a am i"。

我依然採用三次反轉的思路解決這題,主要是為了鞏固前面學習的反轉思路。網上還有很多大牛採用stringbuffer的方法也可方便解決問題。

思路:現將整體字元反轉,再將每個單詞反轉

時間複雜度為o(n),空間複雜度為o(1)。

public

class

reverseenglishsentence

return

string.valueof(sa);

}public

static

void

leftrotatestring(string str)

char sa =str.tochararray();

int len =sa.length;

char saall = reversestring(sa,0,len-1).tochararray();

int j = 0;

string a = null

;

for(int i = 0;i)

}system.out.print(a);

}public

static

void

main(string args)

}

view code

《程式設計之法》1 1 字串旋轉

題目 給定乙個字串,左旋轉m個字元,輸出旋轉後的字串。例如 abcdef 左旋轉3個字元後成為 defabc 解決辦法 三步反轉 將 abcdef 看成兩部分 x abc y def 先對x反轉,再對y反轉,然後整體反轉。void reversestring char s,int bg,int ed...

字串1 字串的旋轉

題目描述 給定乙個字串,要求將字串前面的若干個字元移到字串的尾部。例如 將字串 abcdef 的前三個字元 a b c 移到字串的尾部,那麼原字串將變成 defabc 首先想到的是將需要移動的字元乙個乙個移到字串的尾部。實現如下 public class transfet s n 1 t publi...

01 09字串旋轉

字串輪轉。給定兩個字串s1和s2,請編寫 檢查s2是否為s1旋轉而成 比如,waterbottle是erbottlewat旋轉後的字串 示例一 輸入 s1 waterbottle s2 erbottlewat 輸出 true 示例二 輸入 s1 aa s2 aba 輸出 false 這題沒有做出來,...