Leetcode junior string

还不困。。。再写点。。。

1、反转字符串

(1).传送门

传送门:反转字符串

(2).结果

超过97.46%

(3).代码

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
string reverseString(string &s) {
int si = s.size();
for(int i = 0,j = si-1;i < j;i++,j--) {
swap(s[i],s[j]);
}
return s;
}
};

2、颠倒整数

(1).传送门

传送门:颠倒整数

(2).结果

超过97.56%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public:
int reverse(int x) {
long long p1 = 0,p2 = x;
long long x1 = -2147483648;
long long x2 = 2147483647;
bool flag = 0;
if(p2 < 0)
flag = 1,p2 = -p2;
while(p2) {
p1 = p1*10+p2%10;
p2 /= 10;
}
if(flag) {
p1 = -1ll*p1;
if(p1 < x1)
return 0;
else
return p1;
}
else {
if(p1 > x2)
return 0;
else
return p1;
}

}
};

3、字符串中的第一个唯一字符

(1).传送门

传送门:字符串中的第一个唯一字符

(2).结果

超过24.65%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
int firstUniqChar(string s) {
map<char,int> flag;
int si = s.size();
if(si == 0)
return -1;
int st = 0,en = 1;
flag[s[0]]++;
while(st < si && en < si) {
while(flag[s[st]] > 1 && st < si)
st++;
while(flag[s[en]] < 2 && en < si) {
flag[s[en]]++;
en++;
}
en++;
}
while(flag[s[st]] > 1 && st < si)
st++;
if(st < si)
return st;
else
return -1;
}
};

4、有效的字母异位词

(1).传送门

传送门:有效的字母异位词

(2).结果

超过97.36%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
bool isAnagram(string s, string t) {
int a[60] = {0};
int len1 = s.size();
int len2 = t.size();
if(len1 != len2)
return false;
for(int i = 0;i < len1;i++){
a[s[i]-'A']++;
}

for(int i = 0;i < len2;i++){
a[t[i]-'A']--;
}
for(int i = 0;i < 60;i++){
if(a[i] != 0)
return false;
}
return true;
}
};

5、验证回文字符串

(1).传送门

传送门:验证回文字符串

(2).结果

超过96.96%

这个代码我写的实在是搓…

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public:
bool isPalindrome(string s) {
int si = s.size();
for(int i = 0,j = si-1;i < j;i++,j--)
{
while(!((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9'))) {
i++;
}
printf("%d\n",i);
while(!((s[j] >= 'A' && s[j] <= 'Z') || (s[j] >= 'a' && s[j] <= 'z') || (s[j] >= '0' && s[j] <= '9'))) {
j--;
}
printf("%d\n",j);
if(i > j) break;
if(s[i] == s[j]) {
continue;
}
else {
if((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')) {
if(abs(s[i]-s[j]) != 32)
return false;
}
else {
if(s[i] != s[j])
return false;
}

}
}
return true;
}
};

6、字符串转整数 (atoi)

(1).传送门

传送门:字符串转整数 (atoi)

(2).结果

超过15.09%

错的最多也是写的最烂的一个题

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class Solution {
public:
int myAtoi(string str) {
int len = str.size(),i = 0;
bool f1 = 0,f2 = 0;
int f = 0;
long long pr = 0;
long long mmax = 2147483647;
long long mmin = -2147483648;
for(;i < len;i++) {
if(str[i] == ' ') continue;
if(str[i] <= '9' && str[i] >= '0') break;
if(str[i] == '-') {
if(f == 1) return 0;
if(i == len-1) return 0;
else if(str[i+1] < '0' || str[i+1] > '9') return 0;
else f = 1;
f1 = 1;
i++;
break;
}
else {
if(str[i] == '+') {
if(f == 1) return 0;
if(i == len-1) return 0;
else if(str[i+1] < '0' || str[i+1] > '9') return 0;
else f = 1;
}
else {
if(str[i] >= '0' && str[i] <= '9') {
f2 = 1;
}
else {
if(!f2) return 0;
}
}
}
}
if(i == len) {
i = 0;
while(str[i] < '0' || str[i] > '9')
i++;
}
int cou = 0;
while(str[i] == '0') i++;
for(;i < len;i++) {
if(cou >= 18) break;
if(str[i] >= '0' && str[i] <= '9') {
pr = pr*10+str[i]-'0';
cou++;
}
else
break;
}
if(f1) {
if(pr-1 >= mmax)
return (int)mmin;
else
return (int)pr*(-1);
}
else {
if(pr >= mmax)
return (int)mmax;
else
return (int)pr;
}
}
};

7、实现strStr()

(1).传送门

传送门:实现strStr()

(2).结果

超过99.25.%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int strStr(string haystack, string needle) {
int len2 = needle.size();
if(len2 == 0)
return 0;
int len = haystack.size();
for(int i = 0,j = 0;i < len && j < len2;){
if(haystack[i] == needle[j])
i++,j++;
else
i = i-j+1,j = 0;
if(j == len2)
return i-j;
}
return -1;
}
};

8、报数

(1).传送门

传送门:报数

(2).结果

超过29.47%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
string countAndSay(int n) {
string r[32];
string a[10] = {"0","1","2","3","4","5","6","7","8","9"};
r[1] = "1";
if(n == 1) return r[1];
for(int i = 2;i <= n;i++) {
r[i] = "";
int len = r[i-1].length();
int cou = 1;
for(int j = 0;j < len;j++) {
if(r[i-1][j] == r[i-1][j+1]) {
cou++;
}
else {
r[i] = r[i] + a[cou];
r[i].push_back(r[i-1][j]);
cou = 1;
}
}
}
return r[n];
}
};

9、最长公共前缀

(1).传送门

传送门:最长公共前缀

(2).结果

超过99.82%

(3).代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int si = strs.size();
string p = "";
if(si == 0)
return p;
int now = 0;
int mmin = strs[0].size();
for(int i = 1;i < si;i++) {
int tmp = strs[i].size();
if(tmp < mmin)
mmin = tmp;
}
for(int i = 0;i < mmin;i++) {
for(int j = 1;j < si;j++) {
if(strs[j][i] != strs[0][i])
return p;
}
p.insert(now++,strs[0],i,1);
}
return p;
}
};