面试题

zengjiaqin 2010-11-12 03:36:39
一个字符串,忽略标点,判断其是否是回文字。
...全文
190 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
烈火蜓蜻 2010-11-12
  • 打赏
  • 举报
回复
// 如果是回文就返回True, 不是回文就返回False
return str.SubString( 0, oneLen ) == str.SubString(twoLen ).Reverse();

呵呵,少加了Reverse();
烈火蜓蜻 2010-11-12
  • 打赏
  • 举报
回复
第一步,删除所有的标点符号
第二步,求出剩下的字符串还有多个字符

接下来这样:
(str 没有标点了)
int oneLen = str.Length / 2;
int twoLen = oneLen + str.Length % 2;

// 如果是回文就返回True, 不是回文就返回False
return str.SubString( 0, oneLen ) == str.SubString(twoLen );

原理
abccba;
int oneLen = 6 / 2 = 3;
int twoLen = oneLen + 6 % 2 = 3 + 0 = 3;
则下面的
str.SubString( 0, oneLen ) == str.SubString( twoLen ).Reverse();
就等于
"abc" == "cba".Reverse() == "abc"

如果是:
abcba;
int oneLen = 5 / 2 = 2;
int twoLen = oneLen + 5 % 2 = 2 + 1 = 3;
则下面的
str.SubString( 0, oneLen ) == str.SubString( twoLen ).Reverse();
就等于
"ab" == "ba".Reverse() == "ab"
air123456789 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cxz003 的回复:]

忽略标点

是不是说里面有标点 我们需要把它忽略?
[/Quote]
dudufen 2010-11-12
  • 打赏
  • 举报
回复
呵呵,先剔除标点在比较喽
candytangli 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 zengjiaqin 的回复:]
引用 19 楼 cj205 的回复:
C# code
public static void Main()
{
string tmp = Console.ReadLine();
tmp = Regex.Replace(tmp,"[\\W]","");
for (int i = 0; i < tmp.Length / 2; i++)
{
……

这样应该是对的了
[/Quote]
经鉴定,是正确的
qyp1314 2010-11-12
  • 打赏
  • 举报
回复
先将字符串转换为数组,在进行二分法对比。就搞定了。
candytangli 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zengjiaqin 的回复:]
引用 13 楼 cj205 的回复:
string tmp = Console.ReadLine();
for (int i = 0; i < tmp.Length / 2; i++)
{
if (tmp[i] != tmp[tmp.Length - i -1])
{
Console.WriteLine("这不是回文字");
}
}


我也是……
[/Quote]
标点没排除呀
zengjiaqin 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 cj205 的回复:]
C# code
public static void Main()
{
string tmp = Console.ReadLine();
tmp = Regex.Replace(tmp,"[\\W]","");
for (int i = 0; i < tmp.Length / 2; i++)
{
……
[/Quote]
这样应该是对的了
zengjiaqin 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zengjiaqin 的回复:]
引用 13 楼 cj205 的回复:
string tmp = Console.ReadLine();
for (int i = 0; i < tmp.Length / 2; i++)
{
if (tmp[i] != tmp[tmp.Length - i -1])
{
Console.WriteLine("这不是回文字");
}
}


我也是……
[/Quote]

而且这个好像没有忽略标点符号
Mr-Jee 2010-11-12
  • 打赏
  • 举报
回复
    public static void Main()
{
string tmp = Console.ReadLine();
tmp = Regex.Replace(tmp,"[\\W]","");
for (int i = 0; i < tmp.Length / 2; i++)
{
if (tmp[i] != tmp[tmp.Length - i -1])
{
Console.WriteLine("这不是回文字");
break;
}
}
Console.ReadLine();
}
zengjiaqin 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cj205 的回复:]
string tmp = Console.ReadLine();
for (int i = 0; i < tmp.Length / 2; i++)
{
if (tmp[i] != tmp[tmp.Length - i -1])
{
Console.WriteLine("这不是回文字");
}
}
[/Quote]

我也是这样写的,但是结果好像是错的
zerodegrees 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 zengjiaqin 的回复:]
一个字符串,忽略标点,判断其是否是回文字。
[/Quote]
用栈判断很简单
  • 打赏
  • 举报
回复
忽略标点

是不是说里面有标点 我们需要把它忽略?
Mr-Jee 2010-11-12
  • 打赏
  • 举报
回复
回文:针对于字符串的中间位置两边对应位置相等。
Mr-Jee 2010-11-12
  • 打赏
  • 举报
回复
string tmp = Console.ReadLine();
for (int i = 0; i < tmp.Length / 2; i++)
{
if (tmp[i] != tmp[tmp.Length - i -1])
{
Console.WriteLine("这不是回文字");
}
}
damjmk2 2010-11-12
  • 打赏
  • 举报
回复
那就去掉标点,倒叙比较就好了
q107770540 2010-11-12
  • 打赏
  • 举报
回复
.{2,}
zhouing00 2010-11-12
  • 打赏
  • 举报
回复
可以做比较
q107770540 2010-11-12
  • 打赏
  • 举报
回复
[\u4e00-\u9fa5]{2,}
damjmk2 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiujuan584868710 的回复:]
回文,就是正着读出来的反着读出来的结果一样
[/Quote]

哦,是这样啊,那我理解错了
加载更多回复(5)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧