其他分享
首页 > 其他分享> > 回文字符串

回文字符串

作者:互联网

“回文串”是一个正读和反读都一样的字符串,字符串由数字和小写字母组成,比如“level”或者“abcdcba”等等就是回文串

简单的一句话概括就是关于中心左右对称的字符串

判断一个字符串是否回文,可以先比较第一个字符和最后一个字符是否相同,不同则不是回文,相同则比较第二个和倒数第二个,以此类推,直到比较到中间两个(字符串长为偶数)或中间一个(字符串长为奇数)时,如果仍相同,则为回文

aoa,opopo,aa 这种比较短,如果碰到长度太长的怎么办

 

ASCII A:97 a:65

思路:回文字符串正向遍历与逆向遍历结果都是一样的,因此我们可以准备两个对撞指针,一个正向遍历,一个逆向遍历
//首指针
int left = 0;
//尾指针
int right = str.length() - 1;
//首尾往中间靠
while(left < right){
......
}
具体做法:

step 1:准备两个指针,一个在字符串首,一个在字符串尾。
step 2:在首的指针往后走,在尾的指针往前走,依次比较路过的两个字符是否相等,若是不相等则直接就不是回文。
step 3:直到两指针在中间相遇,都还一致就是回文。因为首指针到了后半部分,走过的正好是尾指针走过的路,二者只是交换了位置,比较相等还是一样的。

知识点:双指针双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个指针(特殊情况甚至可以多个),两个指针或是同方向访问两个链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。


回文字符串除了答题似乎没有什么用处 :

代码实现:

string S = Console.ReadLine();
bool flag = true;
for (int i=0;i<S.Length;i++)
{
if (S[i] != S[S.Length-1-i])
{
flag = false;
break;
}
}
if (flag == true)
{
Console.WriteLine("是");
}
else
{
Console.WriteLine("不是");
}
Console.ReadKey();

 

标签:遍历,Console,step,字符串,回文,指针
来源: https://www.cnblogs.com/wujie-8399/p/16511874.html