1002.查找常用字符
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。
你可以按任意顺序返回答案。
示例 1:
输入:[“bella”,“label”,“roller”]
输出:[“e”,“l”,“l”]
示例 2:
输入:[“cool”,“lock”,“cook”]
输出:[“c”,“o”]
提示:
1 <= A.length <= 100
1 <= A[i].length <= 100
A[i][j] 是小写字母
可能是因为太简单了吧,多以提交的人少了不少。。。
但是,在做题的过程中,也遇到了一点麻烦。
在字符转字符串的时候,找不到合适的方法,就停滞了好长时间。
不过找到了好方法:
char c = 'a';
char c2[2] = {c,0};//定义一个字符数组,即传统的字符串,使其值为单个字符加上字符串结束符\0。
string s;//将字符赋值给string对象。
s = c2;
还看到了另一种好方法:
char ch = 'X';
string s="a" ;//初始化一个单元。这里的"a"只是要分配一个有效的空间,具体值并不重要。"b", "C", " "均是同样的效果。
s[0] = ch;//将需要的字符替换进string对象。
这题的思路还是挺简单的,把数组中的第一个元素但拿出来,然后把第一个元素的每个字符拿出来与其他元素的字符比较,如果相等,就标记该元素。如果除了第一个元素,其他所有的元素都被标记,则这个字符是常用字符。
还要把这个字符从元素中删除,避免再次比较。
代码如下:
class Solution {
public:
vector<string> commonChars(vector<string>& A) {
string temp = A[0];
bool eq[A.size()];
vector<string> res;
int n = 0;
char c;
for(int i=0;i<temp.length();i++){
c = temp[i];
for(int i=1;i<A.size();i++){
eq[i] = false;
}
for(int j=1;j<A.size();j++){
for(int k=0;k<A[j].length();k++){
if(c == A[j][k]){
eq[j] = true;
}
}
}
int k=0;
for(int i=1;i<A.size();i++){
if(eq[i] == false){
k=1;break;
}
}
if(k == 0){
char s[2] = {c,0};
string s2 = s;
res.push_back(s2);
n++;
for(int j=1;j<A.size();j++){
for(int k=0;k<A[j].length();k++){
if(c == A[j][k]){
A[j][k] = '0';break;
}
}
}
}
}
return res;
}
};
我也不想解释了,挺简单的。而且我的代码也不是最好的。。。
(今天,,现在,,心情不好!!为什么我的票数是最少的,还老有人跑票!!为什么,我做的哪里不好吗??我还不够积极吗??还是长得不行,那我可没办法了,看脸就输了QwQ,我也不想长这些痘,我有什么办法,我已经很努力的祛掉他们了,还要几个月的时间,我就可以恢复到原来的样子!!!但是,最重要的是我的票为什么最少!!我要更努力,让更多的人看到我!)
一个集坚强与自信于一身的菇凉。