不知道大家有什么好的方法,请帮忙写一下,多谢了。
28 个解决方案
#1
是要相邻的重复的字符吗??
是的话就从头遍历,跟前一个字符对比,一样的话就删掉
是的话就从头遍历,跟前一个字符对比,一样的话就删掉
#2
是相邻的重复字符,不知道大家有什么好的方法?
#3
肯定要遍历了,记录上一个位置的字符
加上记录重复长度,就是简单的压缩算法了
加上记录重复长度,就是简单的压缩算法了
#4
能给出代码么?多谢了。
#5
搞一个哈希表,每碰到一个都hash,如果存在删除,不存在加入。
#6
void main()
{
char str[] = "A11CC000";
int pos = 0;
int delta = 0;
printf("原始字符串为:%s,", str);
for(int i=1; i<=strlen(str); i++)
{
if(str[i-1]==str[i])
delta++;
else
{
str[pos]=str[pos+delta];
pos++;
}
}
str[pos]='\0';
printf("压缩之后的字符串为:%s", str);
}
#7
里面包含汉字之类的么。
即使是unicode编码的那种,也不过几万的数组就能存下它的总的数目。
遇到每一个字符就打一个标记,最后遍历下这个标记数组即可。它没有要求顺序吧
即使是unicode编码的那种,也不过几万的数组就能存下它的总的数目。
遇到每一个字符就打一个标记,最后遍历下这个标记数组即可。它没有要求顺序吧
#8
都进行面试了,还这样的水平,楼主大学干什么去了,
#9
如果是判断相邻的重复,似乎不难呀!
for(int i = 0;i < str.length;i++)
{
if(current != str[i])
{
current = str[i];
printf(current);
}
}
for(int i = 0;i < str.length;i++)
{
if(current != str[i])
{
current = str[i];
printf(current);
}
}
#10
不难.
#11
不难,简单点的就是用个map
#12
map 都不用
bool ch[26],nu[10]
出现过的标记为true
这样最简单了。
#13
相邻的。。。
easier
easier
#14
2楼的思路没错
#15
应该很简单
思路:
1.初始一个栈s
2.读取字符串,指针p指向首字符 指针q指向p+1;
3.
while(p!=NULL) {
如果(*p!=*q) *p 入栈s;
否则p++;
}
4.输出时 注意是逆序的
思路:
1.初始一个栈s
2.读取字符串,指针p指向首字符 指针q指向p+1;
3.
while(p!=NULL) {
如果(*p!=*q) *p 入栈s;
否则p++;
}
4.输出时 注意是逆序的
#16
5.再搞个栈倒序下下 就可输出了
#17
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1="A11CC000",str2;
str2=str2+str1[0];
for(size_t i=1;i!=str1.size();i++ )
{
if (str1[1]!=str1[i-1])
str2=str2+str1[i];
}
cout<<str2; //str2为去掉相邻重复后的字符串
return 0;
}
输出为AC1000
各位认为错再哪
#include<string>
using namespace std;
int main()
{
string str1="A11CC000",str2;
str2=str2+str1[0];
for(size_t i=1;i!=str1.size();i++ )
{
if (str1[1]!=str1[i-1])
str2=str2+str1[i];
}
cout<<str2; //str2为去掉相邻重复后的字符串
return 0;
}
输出为AC1000
各位认为错再哪
#18
if (str1[1]!=str1[i-1])
这里错了.
这里错了.
#19
1楼正解
#20
C# code : 如果是相邻的不能重复的话
string s = "A11CC000";
string outstring = s[0].ToString(); //the string u want
for(int i=1;i<s.Length;i++)
{
if (s[i] != outstring[outstring.Length - 1])
{
outstring += s[i];
}
else
continue;
}
Console.Write(outstring);
string s = "A11CC000";
string outstring = s[0].ToString(); //the string u want
for(int i=1;i<s.Length;i++)
{
if (s[i] != outstring[outstring.Length - 1])
{
outstring += s[i];
}
else
continue;
}
Console.Write(outstring);
#21
void delrep(char * s)
{
if (!(s&&(*s))) return;
char * d = s++;
while (*s)
if (*d==*s) s++;
else *++d=*s++;
*++d=0;
}
int main()
{
char s[] = "A11CC000";
delrep(s);
printf(s);
return 0;
}
#22
这个很简单啊 !!
for(i=1,j=1;i <s.Length;i++)
{ ch=s[i-1]; //下标从0开始
if(ch!=s[i])
s[j++]=s[i];
}
for(i=1,j=1;i <s.Length;i++)
{ ch=s[i-1]; //下标从0开始
if(ch!=s[i])
s[j++]=s[i];
}
#23
很多正解啊.不知道顶那个啦.
#24
这个要实现起来,很简单,我就是还没看到最好的方法
#25
ding 21 lou ba
#26
现在还没有找工作的,一定要好好准备了
#27
public class TestString {
public static void main(String[] args) {
String str = "Abbbbbb11CC000";
char[] cs = str.toCharArray();
char temp = 0;
String rs = "";
for (char c : cs) {
if (temp != c) {
rs += c;
temp = c;
}
}
System.out.println(rs);
}
}
#28
up
#1
是要相邻的重复的字符吗??
是的话就从头遍历,跟前一个字符对比,一样的话就删掉
是的话就从头遍历,跟前一个字符对比,一样的话就删掉
#2
是相邻的重复字符,不知道大家有什么好的方法?
#3
肯定要遍历了,记录上一个位置的字符
加上记录重复长度,就是简单的压缩算法了
加上记录重复长度,就是简单的压缩算法了
#4
能给出代码么?多谢了。
#5
搞一个哈希表,每碰到一个都hash,如果存在删除,不存在加入。
#6
void main()
{
char str[] = "A11CC000";
int pos = 0;
int delta = 0;
printf("原始字符串为:%s,", str);
for(int i=1; i<=strlen(str); i++)
{
if(str[i-1]==str[i])
delta++;
else
{
str[pos]=str[pos+delta];
pos++;
}
}
str[pos]='\0';
printf("压缩之后的字符串为:%s", str);
}
#7
里面包含汉字之类的么。
即使是unicode编码的那种,也不过几万的数组就能存下它的总的数目。
遇到每一个字符就打一个标记,最后遍历下这个标记数组即可。它没有要求顺序吧
即使是unicode编码的那种,也不过几万的数组就能存下它的总的数目。
遇到每一个字符就打一个标记,最后遍历下这个标记数组即可。它没有要求顺序吧
#8
都进行面试了,还这样的水平,楼主大学干什么去了,
#9
如果是判断相邻的重复,似乎不难呀!
for(int i = 0;i < str.length;i++)
{
if(current != str[i])
{
current = str[i];
printf(current);
}
}
for(int i = 0;i < str.length;i++)
{
if(current != str[i])
{
current = str[i];
printf(current);
}
}
#10
不难.
#11
不难,简单点的就是用个map
#12
map 都不用
bool ch[26],nu[10]
出现过的标记为true
这样最简单了。
#13
相邻的。。。
easier
easier
#14
2楼的思路没错
#15
应该很简单
思路:
1.初始一个栈s
2.读取字符串,指针p指向首字符 指针q指向p+1;
3.
while(p!=NULL) {
如果(*p!=*q) *p 入栈s;
否则p++;
}
4.输出时 注意是逆序的
思路:
1.初始一个栈s
2.读取字符串,指针p指向首字符 指针q指向p+1;
3.
while(p!=NULL) {
如果(*p!=*q) *p 入栈s;
否则p++;
}
4.输出时 注意是逆序的
#16
5.再搞个栈倒序下下 就可输出了
#17
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1="A11CC000",str2;
str2=str2+str1[0];
for(size_t i=1;i!=str1.size();i++ )
{
if (str1[1]!=str1[i-1])
str2=str2+str1[i];
}
cout<<str2; //str2为去掉相邻重复后的字符串
return 0;
}
输出为AC1000
各位认为错再哪
#include<string>
using namespace std;
int main()
{
string str1="A11CC000",str2;
str2=str2+str1[0];
for(size_t i=1;i!=str1.size();i++ )
{
if (str1[1]!=str1[i-1])
str2=str2+str1[i];
}
cout<<str2; //str2为去掉相邻重复后的字符串
return 0;
}
输出为AC1000
各位认为错再哪
#18
if (str1[1]!=str1[i-1])
这里错了.
这里错了.
#19
1楼正解
#20
C# code : 如果是相邻的不能重复的话
string s = "A11CC000";
string outstring = s[0].ToString(); //the string u want
for(int i=1;i<s.Length;i++)
{
if (s[i] != outstring[outstring.Length - 1])
{
outstring += s[i];
}
else
continue;
}
Console.Write(outstring);
string s = "A11CC000";
string outstring = s[0].ToString(); //the string u want
for(int i=1;i<s.Length;i++)
{
if (s[i] != outstring[outstring.Length - 1])
{
outstring += s[i];
}
else
continue;
}
Console.Write(outstring);
#21
void delrep(char * s)
{
if (!(s&&(*s))) return;
char * d = s++;
while (*s)
if (*d==*s) s++;
else *++d=*s++;
*++d=0;
}
int main()
{
char s[] = "A11CC000";
delrep(s);
printf(s);
return 0;
}
#22
这个很简单啊 !!
for(i=1,j=1;i <s.Length;i++)
{ ch=s[i-1]; //下标从0开始
if(ch!=s[i])
s[j++]=s[i];
}
for(i=1,j=1;i <s.Length;i++)
{ ch=s[i-1]; //下标从0开始
if(ch!=s[i])
s[j++]=s[i];
}
#23
很多正解啊.不知道顶那个啦.
#24
这个要实现起来,很简单,我就是还没看到最好的方法
#25
ding 21 lou ba
#26
现在还没有找工作的,一定要好好准备了
#27
public class TestString {
public static void main(String[] args) {
String str = "Abbbbbb11CC000";
char[] cs = str.toCharArray();
char temp = 0;
String rs = "";
for (char c : cs) {
if (temp != c) {
rs += c;
temp = c;
}
}
System.out.println(rs);
}
}
#28
up