Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cosmicing
Prj-Cpps
提交
76e29cac
P
Prj-Cpps
项目概览
cosmicing
/
Prj-Cpps
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Prj-Cpps
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
76e29cac
编写于
4月 29, 2021
作者:
cosmicing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
上传新文件
上级
fbf8cd45
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
72 addition
and
0 deletion
+72
-0
13-Stack/21-Classic/12-removeDuplicateLetters/RemoveDuplicateLetters.cpp
...ssic/12-removeDuplicateLetters/RemoveDuplicateLetters.cpp
+72
-0
未找到文件。
13-Stack/21-Classic/12-removeDuplicateLetters/RemoveDuplicateLetters.cpp
0 → 100644
浏览文件 @
76e29cac
#include<iostream>
#include<string>
#include<string.h>
#include<stack>
#include<assert.h>
using
namespace
std
;
class
Solution
{
public:
string
removeDuplicateLetters
(
string
s
)
{
string
str
;
for
(
int
i
=
0
;
i
<
s
.
length
();
i
++
)
{
if
(
str
.
empty
())
{
//1)如果为空或者s[i]大于栈顶元素,应该压栈;空栈的时候一定压栈,但是大于栈顶元素时,还要判断栈中是否有重复元素,有重复则不压栈=>进入3)步处理;
str
.
push_back
(
s
[
i
]);
}
else
{
//c++: s.find(str.back(), i) != -1,栈顶字符后面还有相同的。
while
(
!
str
.
empty
()
&&
s
[
i
]
<
str
.
back
()
&&
s
.
find
(
str
.
back
(),
i
)
!=
-
1
)
{
//从指定的索引 i 处开始,返回第一次出现的指定子字符串在此字符串中的索引
str
.
pop_back
();
//2)~1=>如果s[i]小于栈顶元素,且在s[i]的后面有与栈顶元素stk.top()相同的字符,弹出堆栈的栈顶元素.继续循环
}
//2)~2=>查找s[i]的后面有与栈顶元素stk.top()相同的字符,退出while循环说明没有找到相同的,就需要进行压栈s[i].
if
(
str
.
find
(
s
[
i
],
0
)
==
-
1
){
//3)~1:对于s[i]大于栈顶元素 + ~2:虽然s[i]<stk.top && 但后面无重复=>都是需要压栈的s[i]元素,需要判断栈中是否有相同的字符?有不压栈,没有则压栈.
str
.
push_back
(
s
[
i
]);
}
}
}
cout
<<
"str = "
<<
str
<<
endl
;
return
str
;
}
};
string
stringToString
(
string
input
)
{
assert
(
input
.
length
()
>=
2
);
string
result
;
for
(
int
i
=
1
;
i
<
input
.
length
()
-
1
;
i
++
)
{
char
currentChar
=
input
[
i
];
if
(
input
[
i
]
==
'\\'
)
{
char
nextChar
=
input
[
i
+
1
];
switch
(
nextChar
)
{
case
'\"'
:
result
.
push_back
(
'\"'
);
break
;
case
'/'
:
result
.
push_back
(
'/'
);
break
;
case
'\\'
:
result
.
push_back
(
'\\'
);
break
;
case
'b'
:
result
.
push_back
(
'\b'
);
break
;
case
'f'
:
result
.
push_back
(
'\f'
);
break
;
case
'r'
:
result
.
push_back
(
'\r'
);
break
;
case
'n'
:
result
.
push_back
(
'\n'
);
break
;
case
't'
:
result
.
push_back
(
'\t'
);
break
;
default:
break
;
}
i
++
;
}
else
{
result
.
push_back
(
currentChar
);
}
}
return
result
;
}
string
boolToString
(
bool
input
)
{
return
input
?
"True"
:
"False"
;
}
int
main
()
{
string
line
;
while
(
getline
(
cin
,
line
))
{
string
s
=
stringToString
(
line
);
string
ret
=
Solution
().
removeDuplicateLetters
(
s
);
string
out
=
(
ret
);
cout
<<
out
<<
endl
;
}
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录