題目:給定乙個字串,要求將字串的前面若干個字元移到字串的尾部。如有字串「abcdef」,將前3個字元移到字串尾部變成「defabc」。寫乙個函式實現此功能。
解法1:蠻力移位
比如將'a'移動到最後一位,就將'a'賦值給乙個臨時變數,然後把後面n-1個字元均向前移動一位(注意移動的時候由前向後依次進行,否則會將有用的值覆蓋掉),最後將臨時變數中的字元賦值給最後一位。若要移動m位字元,就重複呼叫這個函式m次;對於長度為n的字串,,假設需要移動m個字元到尾部,總共需要m*n次移動,因此時間複雜度為o(mn),
空間複雜度為o(1)。
publicview codeclass
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)
}
解法2:三次反轉
思路:先將乙個字串分割成兩個部分,然後把這兩個部分的字串分別反轉,最後再對整個字串進行整體反轉,即可解決問題。
舉個栗子:輸入:字串"abcdef」,移動3位
輸出:字串"defabc」
1、將原字串劃分為兩個部分,x = "abc",y = "def"
2、反轉x得到"cba",反轉y得到"fed"
3、最後將"cbafed"整體反轉,得到"defabc"
這種把字串先分為兩個部分,各自反轉,再整體反轉的方法稱為「三步反轉」法,其時間複雜度為o(n),空間複雜度為o(1)
publicview codeclass
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)
}
舉一反三:
單詞翻**輸入乙個英文句子,反轉句子中單詞的順序。要求單詞內字元的順序不變,句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如,若輸入"i am a student.",則輸出"student. a am i"。
我依然採用三次反轉的思路解決這題,主要是為了鞏固前面學習的反轉思路。網上還有很多大牛採用stringbuffer的方法也可方便解決問題。
思路:現將整體字元反轉,再將每個單詞反轉
時間複雜度為o(n),空間複雜度為o(1)。
publicview codeclass
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)
}
《程式設計之法》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 這題沒有做出來,...