字串的統計字串,以及反轉

2021-10-23 09:16:32 字數 2864 閱讀 4741

【題目】

給定乙個指定字串str,返回str的統計字串。例如,「aaabbadddffc"的統計字串為

「a_3_b_2_a_1_d_3_f_2_c_1」。

補充問題:給定乙個字串的統計字串cstr,再給定乙個整數index,返回ctsr所代表的原始字串的第index個字元。例如,「a_1_b_100"所代表的原始字串上第0個字元是』a』,第50個字元是』b』。

【解答】

原問題。解決原問題的方法很多,如下是一種解法。具體過程如下:

1、如果str為空,那麼統計字串不存在。

2、如果str不為空。首先生成string型別的變數res,表示統計字串,還有整型變數num,代表當前字元的數量。初始時字串res只包含str的第0個字元(str[0]),同時num=1。

3、從str[1]位置開始,從左到右遍歷str,假設遍歷到i位置。如果str[i] = str [i-1],說明當前連續出現的字元str[i-1]還沒結束,令num++,然後繼續遍歷下乙個字元。如果str[i] != str [i-1],說明當前連續出現的字元(str[i-1])已經結束,令 res=res+」"+num+"」+str[i],然後令 num=1,繼續遍歷下乙個字元。以題目給出的例子進行說明,在開始遍歷"aaabbadddffc"之前,res=「a」,num=1。遍歷 str[1~2]時,字元』a』一直處在連續的狀態,所以 num 增加到 3。遍歷 str[3]時,字元』a』連續狀態停止,令 res=res+""+「3」+""+「b」(即"a_3_b"),num=1。遍歷 str[4],字元』b』在連續狀態,num 增加到 2。遍歷 str[5]時,字元』a』連續狀態停止,令 res 為"a_3_b_2_a",num=1。 依此類推,當遍歷到最後乙個字元時,res 為"a_3_b_2_a_1_d_3_f_2_c",num=1。

具體過程請參看如下**中的 getcountstring 方法。

【**】

public string getcountstring

(string str)

char

chs = str.

tochararray()

; string res = string.

valueof

(chs[0]

);int num =1;

for(

int i =

1; i < chs.length; i++

)else

}return

concat

(res, string.

valueof

(num),""

);}public string concat

(string s1, string s2, string s3)

補充問題。求解的具體過程如下:

1.布林型變數 stage,stage 為 true 表示目前處在遇到字元的階段,stage 為 false 表示目前

處在遇到連續字元統計的階段。字元型變數 cur,表示在上乙個遇到字元階段時,遇到的是 cur

字元。整型變數 num,表示在上乙個遇到連續字元統計的階段時,字元出現的數量。整型變數

sum,表示目前遍歷到 cstr 的位置相當於原字串的什麼位置。初始時,stage=true,cur=0(字

符編碼為 0 表示空字元),num=0,sum=0。

2.從左到右遍歷 cstr,舉例說明這個過程,cstr=「a_100_b_2_c_4」,index=105。遍歷完

str[0] == 『a』後,記錄下遇到字元』a』,即 cur=『a』。遇到 str[1]== 『』,表示該轉階段了,從遇到字元的

階段變為遇到連續字元統計的階段,即 stage=!stage。遇到 str[2]== '1』時,num=1;遇到 str[3]== 『0』

時,num=10;遇到 str[4]== 『0』時,num=100;遇到 str[5]==』』,表示遇到連續字元統計的階段變

為遇到字元的階段;遇到 str[6]==『b』,乙個新的字元出現了,此時令 sum+=num(即 sum=100),

sum 表示目前原字串走到什麼位置了,此時發現 sum 並未到達 index 位置,說明還要繼續遍

歷,記錄下遇到了字元』b』,即 cur=『b』,然後令 num=0,因為字元』a』的統計已經完成,現在 num

開始表示字元』b』的連續數量。也就是說,每遇到乙個新的字元,都把上乙個已經完成的統計數

num 加到 sum 上,再看 sum 是否到達 index,如果已到達,就返回上乙個字元 cur,如果沒到達,

就繼續遍歷。

3.每個字元的統計都在遇到新字元時加到 sum 上,所以當遍歷完成時,最後乙個字元的

統計數並不會加到 sum 上,要單獨加。

具體過程請參看如下**中的 getcharat 方法。

public

char

getcharat

(string cstr,

int index)

char

chs = cstr.

tochararray()

;boolean stage =

true

;char cur =0;

int num =0;

int sum =0;

for(

int i =

0; i != chs.length; i++

)else

if(stage)

num =0;

cur = chs[i];}

else

}return sum + num > index ? cur :0;

//這是index = chars.length 時的情況

}

字串的統計字串

給定乙個字串,統計每乙個字母的出現次數 比如aabbccc,列印出來就是a 2 b 2 c 3 思路還是採取遍歷,注意這幾個題的思路都比較類似 要注意這裡的sstream 這裡的clear 並非清空了緩衝區,而只是重置標誌,如果要重置緩衝區,則應為ss.str include include usi...

字串的統計字串

題目 給定乙個字串str,返回str的統計字串。例如,aaabbadddffc 的統計字串為 a 3 b 2 1 d 3 f 2 c 1 補充題目 給定乙個字串的統計字串cstr,再給定乙個整數index,返回cstr所代表的原始字串上第index個字元。例如,a 1 b 100 所代表的原始字串上...

開心IT字串 反轉字串

題目 用c語言實現反轉字串strrev 函式。思想 迴圈,依次將第乙個字元和最後乙個字元交換,第二個字元和倒數第二個字元交換 終止符 0 不動 面試提問字串的操作,主要是考察幾點 一對指標和字串的理解,二是是否進行合法性檢查,三是返回值是否是恰當。char reversestring char st...