題目要求:
給一串很長字串,要求找到符合要求的字串。
例如目的串:123,則1*****3***2,12*****3這些都要找出來。
其實就是類似一些和諧系統。。。。。。
題目分析:
1.假如目的串為:"423",輸入長字串為:"4fsdfk2jfl3fd2jfksd3j4d4d4jkfd4jd3kdf2",則應該輸出 "4fsdfk2jfl3","2jfksd3jld4","4jd3kdf2".
2.使用c++中的map《字元,個數》,先把目的串的每個字元都存入map中,且每個字元的個數初始化為1.然後逐個遍歷長字串中的字元,如果該字元在map中有儲存且個數為1,則num加1,當num=n時,說明已經找到了n個目的串中的字元,可以輸出了,輸出之後又把map等變數重新初始化。startflag=1表示這一次遍歷還沒有找到長字串中的字元匹配到目的串中的字元,當第一次匹配時,則把startflag=0.同時startpos更新,startpos表示某一次遍歷時第一次匹配時的位置。
**實現:
#include #include using namespace std;
const int n = 3;
void handle(char *inputstr,char *desstr);
int main(void)
; char des = "423";
handle(input,des);
return 0;
}void printstr(char *start,char *end)
cout << *end;
cout << endl;
}void inithash(map&hash,char *str)
}void handle(char *inputstr,char *desstr)
++hash[*inputstr];
num++;
if(num==3)
}//第乙個匹配字元連續出現時,選擇最後乙個
//如選擇輸出"4jd3kdf2"而不是"4d4d4jkfd4jd3kdf2",因為第乙個匹配的為4,有多個
//連續的4,選最後乙個
else if(*startpos == *inputstr)
}inputstr++;
}}
微軟面試100題 左旋字串
定義字串的左旋操作 將字串前面的若干個字元移動到字串的尾部 如 abcde 左旋2位 cdeab 思路 ab ba cde edc baedc cdeab 分3部分反轉 public static void leftstr 1 stringbuilder str,int k private stat...
微軟演算法100題26 左旋轉字串
26.左旋轉字串 題目 定義字串的左旋轉操作 把字串前面的若干個字元移動到字串的尾部。如把字串abcdef 左旋轉2 位得到字串cdefab。請實現字串左旋轉的函式。要求時間對長度為n 的字串操作的複雜度為o n 輔助記憶體為o 1 思路 先反轉整個字串 fedcba 在分別反轉各個子字串 fedc...
微軟100題 010反轉字串
翻轉句子中單詞的順序。題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i include include include include u...