字符串右旋 、 字符串去重

xiaoxiao2021-02-27  174

1.–将N个字符的数组,循环右移K位。时间复杂度O(N)。

实现思路: 两种实现思路:

1.借助辅助空间,按照后面的顺序进行拷贝,最后拷贝回字符串 2.三次反转法就可实现

#include<algorithm> void RotateKth(char str[],int size,int k) { //三步翻转法 k %= size; /*Reverse(&str[0], k); Reverse(&str[k], size-k); Reverse(&str[0],size);*/ reverse(&str[0],&str[size-k]); reverse(&str[size-k], &str[size]); reverse(&str[0], &str[size]); }

2.【附加题】–删除小写字母字符串中重复字符。如果可以,优先删除重复字符中排在比他小字符前面的字符。 比如,输入:bbcacdww;输出:bacdw

提示:暴力求解效率太低,考虑哈希思想。

void Dultipicate(char str[], int size) { int carray[26] = { 0 }; for (int i = 0; i < size; i++) { if (str[i] >= 'a'&&str[i] <= 'z') { carray[str[i] - 'a']++; } } int sum = 0; for (int i = 0; i < 26; i++) { if (carray[i] >= 2) { sum += carray[i] - 1; } } int length = size - sum; for (int i = 0; i < size; i++) { if (str[i] >= 'a'&&str[i] <= 'z') { carray[str[i] - 'a']++; } } int size1 = length; char* temp=new char[length]; for (int i = size - 1; i >= 0; i--) { if (carray[str[i] - 'a']>=0) { temp[--length] = str[i]; carray[str[i] - 'a'] =-1; } } for (int i = 0; i < size1; i++) { str[i] = temp[i]; } str[size1] = 0; }
转载请注明原文地址: https://www.6miu.com/read-12209.html

最新回复(0)