C++ 按排序顺序重新排列字符串,后跟整数总和
讨论一个问题,以排序的顺序重新排列一串字母并添加字符串中存在的所有整数,例如
Input : str = “adv4fc3” Output : “ acdfv7” Explanation: all the letters have been sorted to “acdfv” followed by the sum of integers 4 and 3. Input: str = “ h2d7e3f ” Output: “ defh12” Explanation: all the letters have been sorted to “defh” followed by the sum of integers 2, 7, and 3.
寻找解决方案的方法
在这个问题中我们有两个任务要执行,一个是对字符串进行排序,另一个是添加整数值。
可以通过保持字符串中每个字母的计数,然后通过根据它们的计数插入所有字母来形成一个新字符串来对字符串进行排序。
我们可以通过将整数添加到每次出现的变量来进行整数的加法。
示例
上述方法的C++代码
#include<bits/stdc++.h> using namespace std; const int MAX_CHAR = 26; int main(){ string str = "h2d7e3f"; int ch[26] = {0}; int count = 0; //遍历字符串的所有字符。 for (int i = 0; i < str.length(); i++){ //记录每个字符的出现次数。 if (str[i]>='a' && str[i] <='z') ch[str[i] - 97] = ch[str[i] - 97] + 1; //如果遇到一个整数。 else count = count + (str[i]-'0'); } string final = ""; //在ch数组的帮助下制作一个排序的字符串。 for (int i = 0; i < 26; i++){ char a = (char)('a'+i); //插入当前字符 //到新字符串直到计数结束 while (ch[i]-- != 0) final = final + a; } //最后在字符串中插入所有整数的总和。 if (count>0) final = final + to_string(count); cout << "重新排列的字符串: " << final; return 0; }输出结果
重新排列的字符串: defh12
以上代码说明
数组ch初始化为26大小,因为我们需要保留26个字母出现的次数。
在第一个循环中,我们遍历字符串。对于每个字母表,我们都在增加该字母表的计数。对于每个整数,我们都将其添加到计数变量中。
在第二个循环中,我们从所有计数中形成一个新的排序字符串,其中我们根据计数将字符附加到字符串中。
最后,我们将第一个循环中计算出的整数总和附加到字符串中。
结论
在本教程中,我们讨论了如何按排序顺序排列字符串,并基于哈希表方法解决了一个问题。我们还讨论了这个问题的C++代码。我们可以使用任何其他编程语言(如C、Java、Python等)进行编写。我们希望本教程对您有所帮助。